R B*_*sar 6 pagerslidingtabstrip android-recyclerview
共有3个标签:ONE || 两个 || TRI
例如:
myList = 1,2,3
问题 :
之后我去页TWO
myList = 1,2,3,1,2,3(双副本)
如果我去页面TRI
myList = 1,2,3,1,2,3,1,2,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();
}
Run Code Online (Sandbox Code Playgroud)
我这样使用oneFragment.java:
mListFoodAdapter = new ListFoodAdapter(getContext(), mFoodModel);
mListFoodAdapter.swap(mFoodModel);
mRecyclerViewListFood.setLayoutManager(linearLayoutManager);
mRecyclerViewListFood.setAdapter(mListFoodAdapter);
mRecyclerViewListFood.setItemAnimator(new DefaultItemAnimator());
Run Code Online (Sandbox Code Playgroud)
但它给了我nullPointer有时没有数据显示RecyclerView
请建议我如何使列表数据不再回来之后,从网页复制TWO的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",String.valueOf(R.drawable.icon), "test 2"));
mListFoodAdapter = new ListFoodAdapter(getContext(), mFoodModel);
mRecyclerViewListFood.setLayoutManager(linearLayoutManager);
mRecyclerViewListFood.setAdapter(mListFoodAdapter);
mRecyclerViewListFood.setItemAnimator(new DefaultItemAnimator());
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
只需使用此方法来清除您的片段数据即可。
@Override
public void onDestroyView() {
super.onDestroyView();
tutPojo.clear();
}
Run Code Online (Sandbox Code Playgroud)
你的方法有问题onViewCreated()。每次创建片段视图后都会调用 OnViewCreated() 方法。但如果片段在内存中,则它会被重用。mFoodModel这就是您的列表没有重新初始化的原因。所以你需要重新初始化mFoodModel以创建以前的数据。
所以这是你修改后的 OnCreateView()`
@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 = new ArrayList<>(); // initialize you list
mFoodModel.add(new FoodModel("1",String.valueOf(R.drawable.icon), "test 1"));
mFoodModel.add(new FoodModel("2",String.valueOf(R.drawable.icon), "test 2"));
mListFoodAdapter = new ListFoodAdapter(getContext(), mFoodModel);
mRecyclerViewListFood.setLayoutManager(linearLayoutManager);
mRecyclerViewListFood.setAdapter(mListFoodAdapter);
mRecyclerViewListFood.setItemAnimator(new DefaultItemAnimator());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2357 次 |
| 最近记录: |