【发布时间】:2015-06-30 10:17:26
【问题描述】:
我的 MainActivity 包含一个 viewPager。
在 MainActivity.java 中,我为 viewpager 设置了适配器。该适配器扩展了 FragmentStatePagerAdapter。我要替换的片段是 相机片段。因此,当用户点击切换摄像头按钮时,我现在想显示摄像头片段,这次要打开前置摄像头。
单击切换相机按钮时,我从传递给自定义适配器的片段数组列表中删除片段。我添加新片段并调用 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。关于如何更新/替换片段的任何想法?显然我错过了一些东西。我不想重置适配器。这似乎是一个昂贵的操作(如果页面/片段的数量增加。另外,我只需要替换一个片段,所以重新实例化每个其他片段没有任何意义。
-
请发布 MainViewPagerAdapter 的代码。
-
@Okas。用 MainViewPagerAdapter 更新它。
标签: android android-fragments android-viewpager notifydatasetchanged fragmentstatepageradapter