2012-10-14 67 views
3

我有一個2頁的viewpager,每個片段我把一個按鈕切換片段, 但如果我改變方向切換不起作用。 使用我的OnChangePageButtonClick界面切換片段I 爲什麼會發生這種情況?Android的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; 

} 

播放片段類似於炫魅片段。

回答

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);   
} 

然後在您的onclick方法中調用此方法

((ViewPagerMusic)getActivity())。selectPage(1);