0

У меня есть ListView, ArrayList и MaterielAdapter, который расширяет ArrayAdapter. Моя проблема в том, что вызов notifyDataSetChanged() не будет обновлять мой ListView ... Я потратил 3 часа на то, чтобы попробовать все подобные проблемы в SO, но ни один из них не был эффективен для меня.Пользовательский размер адаптера 0 после notifyDataSetChanged()

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(); 

Моя коллекция имеет все объекты, но ListView никогда не обновит, ни адаптер ...

+0

Опубликовать свой адаптер, пожалуйста. –

+0

Объект, который вы изменили, не обновлен в вашем классе адаптера, не так ли? – steve

+2

Вы даже не используете этот адаптер? – Stefan

ответ

0

Обнаруженные решение

Моя проблема заключалась в том, что я устанавливал мой ArrayList другой ArrayList

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

кажется, что установка нового объекта в список не работает, то, что я, наконец, сделал следующий:

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

И кстати для тех, кто должен иметь заголовок в их ListView, вы необходимо сделать так:

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

Stock адаптер и адаптер будет ваш список тоже.

MaterialAdapter adapter = new MaterialAdapter(this, 
R.layout.object_line); 

lvObjects = new ListView(this); 
lvObjects.setAdapter(adapter); 
... 
adapter.add(new Object()); 
adapter.notifyDataSetChanged(); 

Currenlty ваш адаптер, не знаю, что ему нужно использовать список, который вы передаете в аргументе. Но вы расширяете ArrayAdapter, это означает, что ваш адаптер является списком.

+0

Store *;) et non le problème ne vient pas de là Raphael, en fait si tu veu tout fonctionne très bien sauf cette foutction fonction notifyDataSetChanged .. en fait dans la classe où je liste les matériels, j'ai mon ArrayList dont le contenu change à plusieurs endroits et à chaque fois j'appelle notifyDataSetChanged sur mon adapter, qui est censé se mettre à jour par rapport à la liste que je lui ai attribué, mais ça ne veut pas .. alors que quand je reset l'adapter ça fonctionne bien, et la suppression se fait très bien ... – ArteFact

+0

D'accord, mais déjà dans ton example, tu использовать 'ObjectAdapter' et tu nous comme adapter 'MaterielAdapter'. Et c'est un forum uniquement en anglais (je sais que mon anglais est pas отлично), mais on n'est forcé de parlé en anglais. –

+0

J'ai anonymisé pour rendre l'example plus plus, en réalité tu l'auras compris object = Materiel – ArteFact

1

Возможно, вы даже не добавили ListView в представление активности. Вместо того чтобы делать новый Listview (это), я бы рекомендовал вам определить ListView в макете XML Что-то вроде:

<ListView 
    android:id="@+id/listview" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

Тогда в вашей деятельности:

lvObjects = (ListView) findViewById(R.id.listview); 
+0

Спасибо, но я не настолько тупой, но я его добавил. – ArteFact

+0

Хорошо .....это единственная странная вещь, которую я видел, но без остальной части деятельности трудно сказать, что происходит –

+0

Хотя у меня были подобные проблемы в прошлом, и иногда я решил переопределить массив до изменения это и вызов notifyDataSetChanged .. Хотя это не нужно ... –

 Смежные вопросы

  • Нет связанных вопросов^_^