nsvir
nsvir

Reputation: 8961

ListView in Fragment contains duplicate values when resumed

I am using a ListView in a Fragment. But when I switch between two fragment and come back the listView has been duplicated..

I thinks it's because I creat the list View in onCreateView() But where should I create the list view to avoid the second creation ?

Here my code:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    //inflate fragment_critere.xml
    mView = inflater.inflate(R.layout.fragment_critere, container, false);

    //Create Criteria list
    populateCriteriaList();

    //Create ListView
    populateListView();

    // Create the "Autre Critères"'s dialog
    mDialogFragment = new MyDialogFragment();

    // setOnclickListener on "Autre Critères"
    LinearLayout mText = (LinearLayout) mView.findViewById(R.id.other_critere);
    mText.setClickable(true);
    mText.setOnClickListener(new View.OnClickListener() {
        public void onClick(final View view) {
            // Open dialog on click
            mDialogFragment.show(getActivity().getSupportFragmentManager(), null);
        }
    });


    return mView;
}

private void populateCriteriaList() {
    mCriteria.add(new Criteria("Type de biens", new String[]{"Appartement", "Maison", "Loft", "Terrain"}, new boolean[]{true, true, false, false}, true, true));
    mCriteria.add(new Criteria("Prix Minimum", 500000, true, "?"));
    mCriteria.add(new Criteria("Surface Minimum", 100, true, "m²"));
    mCriteria.add(new Criteria("Nombre de pièces minimium", new String[]{"1 pièce", "2 pièces", "3 pièces", "4 pièces"}, new boolean[]{false, false, true, false}, false, true));
    mCriteria.add(new Criteria("Cave", new String[]{"Présent", "Absent"}, new boolean[]{false, true}, false, false));
}

private void populateListView() {
    ArrayAdapter<Criteria> adapter = new MyCriteriaAdapter();
    ListView mListView = (ListView) mView.findViewById(R.id.listView);
    mListView.setAdapter(adapter);
}

Thanks in advance :)

Upvotes: 0

Views: 1282

Answers (1)

Philipp Jahoda
Philipp Jahoda

Reputation: 51411

Have you tried reinitializing or clearing your List?

private void populateCriteriaList() {

    // THIS LINE
    mCriteria = new ArrayList<Criteria>();

    // OR THIS LINE
    mCriteria.clear();

    mCriteria.add(new Criteria("Type de biens", new String[]{"Appartement", "Maison", "Loft", "Terrain"}, new boolean[]{true, true, false, false}, true, true));
    mCriteria.add(new Criteria("Prix Minimum", 500000, true, "?"));
    mCriteria.add(new Criteria("Surface Minimum", 100, true, "m²"));
    mCriteria.add(new Criteria("Nombre de pièces minimium", new String[]{"1 pièce", "2 pièces", "3 pièces", "4 pièces"}, new boolean[]{false, false, true, false}, false, true));
    mCriteria.add(new Criteria("Cave", new String[]{"Présent", "Absent"}, new boolean[]{false, true}, false, false));
}

Upvotes: 1

Related Questions