2012-10-14 5 views
3

각 단편에 2 페이지짜리 viewpager를 가지고 있습니다. 단편화 전환 버튼을 넣으십시오. 단, 전환 방향이 바뀌면 바뀌지 않습니다. OnChangePageButtonClick 인터페이스를 사용하여 전환 조각에 대해 왜 이런 일이 발생합니까?안드로이드 ViewPager, 단편에서 다른 단편으로 바꾸기

ViewPager 활동 :

public class ViewPagerMusic extends FragmentActivity implements OnChangePageButtonClick { 

    private ViewPager vp; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_pager_music); 

     ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(super.getSupportFragmentManager(), fragments); 

     vp = (ViewPager)findViewById(R.id.viewpager); 
     vp.setAdapter(viewPagerAdapter); 
    } 

    private class ViewPagerAdapter extends FragmentStatePagerAdapter { 

     public ViewPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
    public Fragment getItem(int position) { 
     switch(position) { 
      case 0: 
       MainPage mainPage = new MainPage(); 
       mainPage.setOnChengeButtonListener(ViewPagerMusic.this); 
       return mainPage; 
      case 1: 
       PlaylistPage playlistPage = new PlaylistPage(); 
       playlistPage.setOnChengeButtonListener(ViewPagerMusic.this); 
       return playlistPage; 
     } 
     return null; 
    } 

     @Override 
     public int getCount() { 
      return 2; 
     } 

    } 

    @Override 
    public void selectPage(int page) { 
     vp.setCurrentItem(page);   
    } 

} 

내 Frgamnets :

public class MainPage extends Fragment { 

    public MainPage() { 
     setRetainInstance(true); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.music_main_page, container, false); 
     ImageButton btnPlaylist = (ImageButton)v.findViewById(R.id.btnGoPlaylist2); 
     btnPlaylist.setOnClickListener(onButtonListener); 
     return v; 
    } 

    private OnClickListener onButtonListener = new OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      onChangePageButtonClick.selectPage(1); 
     } 

    }; 

    public void setOnBackButtonListener(OnChangePageButtonClick onChangePageButtonClick) { 
     this.onChangePageButtonClick = onChangePageButtonClick; 
    } 

    private OnChangePageButtonClick onChangePageButtonClick; 

} 

재생 목록 조각은 조각을 MainPage 유사합니다.

답변

8

조각에 ViewPagerMusic 활동에 대한 참조가 저장되어 있습니다. 그러나 회전 후에는 활동이 파괴되어 다시 생성되므로 조각에 이전 활동에 대한 참조가 포함됩니다.

((ViewPagerMusic) getActivity()).selectPage(1); 
+0

매우 효과적입니다. 감사합니다. – wilek

+0

하지만 권장하지는 않습니다. https://forums.bignerdranch.com/t/callback-interfaces-and-nameofactivityclass-getactivity-method-variables/9829에 대한 자체 콜백을 구현해야합니다. – user25

4

그냥보기 호출기에

public void selectPage(int page) { 
    vp.setCurrentItem(page);   
} 

@Override를이 방법을 만들 :

대신 활동에 대한 참조를 저장, 당신은이 같은 단편에서 활동의 메소드를 호출 할 수

다음에 onclick 메서드로 이것을 호출하십시오.

((ViewPagerMusic) getActivity()). selectPage (1);

관련 문제