避免在recyclerView上复制碎片列表数据

时间:2017-01-13 08:50:16

标签: android

我在一项活动中切换了一些片段。

我发现一个问题是,当我转回片段时,它会显示重复的数据。

我尝试清除arrayList数据来解决它。

但我想知道更聪明的方式。

是否有可能为重复数据避免此问题?

我的片段代码:

public class Vaccine extends Fragment {

    private List<VaccineItem> vaccineList = new ArrayList<>();
    private VaccineAdapter vaccineAdapter;
    private RecyclerView recyclerVaccine;

    public Vaccine() {
    }

    public static Vaccine newInstance() {
        return new Vaccine();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.vaccine_fragment_, container, false);

        recyclerVaccine = (RecyclerView) view.findViewById(R.id.recyclerVaccine);
        recyclerVaccine.setLayoutManager(new LinearLayoutManager(getActivity()));

        vaccineList.clear();// i use it to slove the problem.--------------
        testData();
        vaccineAdapter = new VaccineAdapter(getActivity(), vaccineList);
        recyclerVaccine.setAdapter(vaccineAdapter);
        vaccineAdapter.notifyDataSetChanged();

        return view;
    }
    private void testData(){
        VaccineItem vaccineItem=new VaccineItem("Data1");
        vaccineList.add(vaccineItem);
        vaccineItem=new VaccineItem("Data2");
        vaccineList.add(vaccineItem);
    }
}

3 个答案:

答案 0 :(得分:6)

试试这个

View view; // declare this globally

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    if(view == null){ // initialize if view is null
     view = inflater.inflate(R.layout.vaccine_fragment_, container, false);

    recyclerVaccine = (RecyclerView) view.findViewById(R.id.recyclerVaccine);
    recyclerVaccine.setLayoutManager(new LinearLayoutManager(getActivity()));

    vaccineList.clear();// i use it to slove the problem.--------------
    testData();
    vaccineAdapter = new VaccineAdapter(getActivity(), vaccineList);
    recyclerVaccine.setAdapter(vaccineAdapter);
    vaccineAdapter.notifyDataSetChanged();
    }
    return view;
}

答案 1 :(得分:0)

在构造函数中调用testData(),而不是在onCreateView中调用。

答案 2 :(得分:0)

您获取重复数据的原因是您在创建片段视图时调用testData()。每次重新创建片段时,都会添加相同的项目。清除列表没有任何问题。