Search code examples
androidlistviewadapterandroid-arrayadaptercustom-adapter

Custom adapter size 0 after notifyDataSetChanged()


I have a ListView, an ArrayList and an MaterielAdapter that extends ArrayAdapter. My problem is that calling notifyDataSetChanged() won't update my ListView... I spent 3 hours trying all similar issues on SO but none was efficient for me.

private ListView lvMateriels;
private ArrayList<Materiel> materiels = new ArrayList<>();
...
lvMateriels = new ListView(this);
lvMateriels.setAdapter(new MaterielAdapter(this, R.layout.object_line,materiels));
...
materiels.add(new Materiel());
((MaterielAdapter)lvMateriels.getAdapter()).notifyDataSetChanged();

My collection has all the objects but listview never refreshes, nor the adapter...


Solution

  • Found out solution

    My problem was that I was setting my ArrayList another ArrayList

    materiels = getMateriels() // getMateriels() returns an ArrayList<Materiel>
    

    It seems that setting a new object to the list doesn't work, what I finally did is the following :

    materiels.clear();
    materiels.addAll(getMateriels());
    

    And by the way for those who need to have a header into their ListView, you have to do like :

    ((YourAdapter)((HeaderViewListAdapter)yourListView.getAdapter()).getWrappedAdapter()).notifyDataSetChanged();