我正在創建一個應用程序,使用viewpager在4個特定片段之間滑動。使用viewpager與特定片段
到目前爲止,我讀過的viewpager的所有例子都是在每次調用FragmentPagerAdapter的getPosition方法時創建新的片段。因此,它是這樣的:
return FragmentA.newInstance();
我所做的是以下幾點:
在主要活動
public static final int FRAGMENTS = 4;
public static final String FRAGMENT_LIST ="LIST";
public static final String FRAGMENT_SETTINGS = "SETTINGS";
public static final String FRAGMENT_MAP = "MAP";
public static final String FRAGMENT_TICKET = "TICKET";
MainAdapter _adapter;
ViewPager _pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager()
.beginTransaction()
.add(new FragmentMap(), FRAGMENT_MAP)
.add(new FragmentList(), FRAGMENT_LIST)
.add(new FragmentTicket(), FRAGMENT_TICKET)
.add(new FragmentSettings(), FRAGMENT_SETTINGS)
.commit();
}
_adapter = new MainAdapter(getSupportFragmentManager());
_pager = (ViewPager) findViewById(R.id.pager);
_pager.setAdapter(_adapter);
}
,並在適配器:
public class MainAdapter extends FragmentPagerAdapter {
FragmentManager _manager;
public MainAdapter(FragmentManager fm) {
super(fm);
_manager = fm;
}
@Override
public Fragment getItem(int position) {
return _manager.getFragments().get(position);
}
@Override
public int getCount() {
return ActivityMain.FRAGMENTS;
}
}
這就提出了一個異常,因爲適配器試圖更改getItem中每個片段的標籤
我的問題是:
a)每次總是使用相同的片段不正確嗎?我沒有看到使用上述方法或類似方法的示例,它們總是在getItem方法中創建一個新實例。
b)如果我希望片段具有某種持久性,那麼這是否意味着我應該存儲數據應該由每個片段在靜態變量中保存並始終創建使用這些變量的新實例?
我試過,問題是,當我使用FragmentPagerAdapter時,我得到一個錯誤,說該視圖已經有一個父,但它與FragmentStatePagerAdapter一起工作,但後來我的問題是,只要我瀏覽出特定片段,刪除,所以我不能用它說getSupportFragmentManager()。getFragments()。get(0); 這是我需要的,因爲將來每個fargment都會與父級活動進行通信並向其發送消息,該活動將用於更新其他片段 – Cruces 2015-03-03 13:10:52
對不起,我沒有注意到您的setOffScreenPageLimit評論,我將嘗試,謝謝 – Cruces 2015-03-03 13:13:31
我也建議你使用FragmentStatePagerAdapter而不是FragmentPagerAdapter。 – Bubu 2015-03-03 13:27:53