Список данных дублируется после перехода к другому фрагменту (скользящая вкладка)
Есть 3 вкладки: ОДИН || ДВА || TRI
пример: myList = 1,2,3
выпуск:
после того, как я перехожу на страницу 2 myList = 1,2,3,1,2,3
(двойной дубликат)
если я пойду на страницу TRI myList = 1,2,3,1,2,3,1,2,3
(тройной дубликат)
после того как я искал решение в интернете, я нашел этот код (в классе адаптера):
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
Пожалуйста, предложите мне, как сделать так, чтобы данные списка больше не дублировались после возвращения со страницы ДВУХ ТРИ
ниже мои коды 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());
}
}
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);
}
}
2 ответа
Просто используйте этот метод, чтобы очистить ваши данные фрагмента.
@Override
public void onDestroyView() {
super.onDestroyView();
tutPojo.clear();
}
В тебе проблема 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());
}