转到其他片段后,数据列表重复(滑动选项卡)

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

请建议我如何使列表数据不再回来之后,从网页复制TWOTRI

吼叫我的代码oneFragment.javaViewPagerAdapter.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)

Abh*_*mar 5

只需使用此方法来清除您的片段数据即可。

@Override
public void onDestroyView() {
    super.onDestroyView();
    tutPojo.clear();
}
Run Code Online (Sandbox Code Playgroud)


cha*_*l03 4

你的方法有问题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)