
例如:
myList = 1,2,3
问题 :
在我去第二页之后
myList = 1,3,1,3(双重复制)
如果我去TRI页面
myList = 1,3(三重复)
在我在互联网上寻找解决方案后,我发现这个代码(在Adapter类上):
public voID swap(List<FoodModel> datas){ datas = new ArrayList<>();//updated if(mListFood !=null || mListFood.size() !=0){ mListFood.clear(); mListFood.addAll(datas); }else{ mListFood = datas; } notifyDataSetChanged(); } 我在oneFragment.java中使用了这样的:
mListFoodAdapter = new ListFoodAdapter(getContext(),mFoodModel); mListFoodAdapter.swap(mFoodModel); mRecyclerVIEwListFood.setLayoutManager(linearlayoutmanager); mRecyclerVIEwListFood.setAdapter(mListFoodAdapter); mRecyclerVIEwListFood.setItemAnimator(new DefaultItemAnimator());
但它给了我nullPointer有时在RecyclerVIEw中没有数据显示
拜托,建议我从TRI的第二页回来后,如何使列表数据不再重复
请看我的代码oneFragment.java和VIEwPagerAdapter.java
oneFragment.java
public class FoodFragment extends Fragment { private RecyclerVIEw mRecyclerVIEwListFood; private List<FoodModel> mFoodModel = new ArrayList<>(); private ListFoodAdapter mListFoodAdapter; @Nullable @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_foods,container,false); } @OverrIDe public voID onVIEwCreated(VIEw vIEw,Bundle savedInstanceState) { super.onVIEwCreated(vIEw,savedInstanceState); FragmentActivity fragmentActivity = getActivity(); linearlayoutmanager linearlayoutmanager = new linearlayoutmanager(fragmentActivity); mRecyclerVIEwListFood = (RecyclerVIEw) vIEw.findVIEwByID(R.ID.recyclerVIEw_List_foods); mFoodModel.add(new FoodModel("1",String.valueOf(R.drawable.icon),"test 1")); mFoodModel.add(new FoodModel("2","test 2")); mListFoodAdapter = new ListFoodAdapter(getContext(),mFoodModel); mRecyclerVIEwListFood.setLayoutManager(linearlayoutmanager); mRecyclerVIEwListFood.setAdapter(mListFoodAdapter); mRecyclerVIEwListFood.setItemAnimator(new DefaultItemAnimator()); }} VIEwPagerAdapter.java:
public class VIEwPagerDetailStandAdapter extends FragmentStatePagerAdapter { private final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public VIEwPagerDetailStandAdapter(FragmentManager manager) { super(manager); } @OverrIDe public Fragment getItem(int position) { return mFragmentList.get(position); } @OverrIDe public int getCount() { return mFragmentList.size(); } public voID addFragment(Fragment fragment,String Title) { mFragmentList.add(fragment); mFragmentTitleList.add(Title); } @OverrIDe public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); }}解决方法 你在onVIEwCreated()方法中有一个问题. 每次创建片段视图后都会调用OnVIEwCreated()方法.但是片段如果在内存中则被重用.这就是你的mFoodModel列表没有重新初始化的原因.因此,您需要重新初始化mFoodModel以创建以前的数据.
所以这是你修改过的OnCreateVIEw()`
@OverrIDepublic voID onVIEwCreated(VIEw vIEw,Bundle savedInstanceState) { super.onVIEwCreated(vIEw,savedInstanceState); FragmentActivity fragmentActivity = getActivity(); linearlayoutmanager linearlayoutmanager = new linearlayoutmanager(fragmentActivity); mRecyclerVIEwListFood = (RecyclerVIEw) vIEw.findVIEwByID(R.ID.recyclerVIEw_List_foods); mFoodModel = new ArrayList<>(); // initialize you List mFoodModel.add(new FoodModel("1","test 1")); mFoodModel.add(new FoodModel("2","test 2")); mListFoodAdapter = new ListFoodAdapter(getContext(),mFoodModel); mRecyclerVIEwListFood.setLayoutManager(linearlayoutmanager); mRecyclerVIEwListFood.setAdapter(mListFoodAdapter); mRecyclerVIEwListFood.setItemAnimator(new DefaultItemAnimator());} 总结 以上是内存溢出为你收集整理的android-recyclerview – 转到其他片段后重复数据列表(滑动标签)全部内容,希望文章能够帮你解决android-recyclerview – 转到其他片段后重复数据列表(滑动标签)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)