我的MainActivity包含一個viewPager。替換Viewpager中的一個片段(notifyDataSetChanged不起作用)
在MainActivity.java中,我爲viewpager設置了適配器。該適配器擴展了FragmentStatePagerAdapter。我想要替換的片段是一個 cameraFragment。因此,當用戶點擊切換照相機按鈕時,我想現在顯示照相機片段,這次打開前置攝像頭。
在點擊開關Camera按鈕時,我從傳遞給自定義適配器的片段的數組列表中刪除片段。我添加新的片段並調用notifydatasetchanged。但是,這不會導致添加新片段。我如何實現在支持我自定義片段狀態尋呼機適配器的viewpager中動態替換片段? 代碼:
mainPageFragments = new ArrayList<>();
mainPageFragments.add(new ResultsFragment_());
mainPageFragments.add(DemoCameraFragment_.newInstance(false));
pagerAdapter = new MainViewPagerAdapter(getSupportFragmentManager(),mainPageFragments);
要更換片段:在收到相關的事件怎麼辦,
mainPageFragments.remove(1);
if (event.getCameraState().equals(CameraSwitchButton.CameraTypeEnum.BACK)) {
mainPageFragments.add(DemoCameraFragment.newInstance(false));
} else {
mainPageFragments.add(DemoCameraFragment.newInstance(true));
}
// Not Working...
pagerAdapter.notifyDataSetChanged();
適配器代碼:
public class MainViewPagerAdapter extends FragmentStatePagerAdapter {
ArrayList<Fragment> fragmentsArray;
public MainViewPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragmentsArray) {
super(fm);
this.fragmentsArray = fragmentsArray;
}
@Override
public Fragment getItem(int position) {
return fragmentsArray.get(position);
}
@Override
public int getCount() {
return fragmentsArray.size();
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
}
發佈一些代碼你已經完成了 – Mano
@Mano。有關如何更新/替換片段的任何想法?顯然我錯過了一些東西。我不想重置適配器。它看起來像一個昂貴的操作(如果頁數/片段數量增加了,而且我只需要替換一個片段,所以重新實例化每個其他片段就沒有任何意義了) – Rohan
請發佈代碼MainViewPagerAdapter。 – Okas