我在viewpager中有几个片段,每当用户选择浏览不同的社区时,第一个片段(TimelineFragment)就会被替换。
当我将FragmentPagerAdapter更改为FragmentStatePagerAdapter时,我能够成功更改TimelineFragment,因为即使我使用pagerAdapter.notifyDataSetChanged(),FragmentPagerAdapter也不会更新片段
因此,我使用FragmentStatePagerAdapter和以下代码:
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
public void setItem(int position, Fragment fragment) {
fragmentList.set(position, fragment);
}
@Override
public int getCount() {
return fragmentList.size();
}
@Override
public int getItemPosition(Object object) {
return PagerAdapter.POSITION_NONE;
}
问题是每当我移动到片段时,该片段都会被刷新。这使得我在每个片段中的recyclerview重新加载所有列表并转到该列表的顶部。
我的目标是当用户选择查看不同的社区时,时间轴片段(ALONE,希望排除其他片段)将是唯一重新加载的片段,并根据所选社区加载相应的列表。
每次在视图寻呼机中的3个片段之间移动时,片段中的onCreateView
方法都会调用。所以解决方案是:
1-在你的片段中添加static boolean loaded=false;
2-在调用刷新recyclerview的代码或任何你不想调用的代码之前添加
if(!loaded){
//your code
...
loaded=true;
}