J'ai ArrayAdapter avec cette structure d'éléments:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout ... >
<TextView
Android:id="@+id/itemTextView"
... />
</RelativeLayout>
Et ajoutez cet adaptateur pour:
mAdapter = new ArrayAdapter<String>(this, R.layout.item,
R.id.itemTextView, itemsText);
Tout va bien mais je veux mettre à jour le texte dans les éléments de l'adaptateur. J'ai trouvé une solution
mAdapter.notifyDataSetChanged();
mais ne comprends pas comment l'utiliser. Aidez-moi, s'il vous plaît.
pd Mon code:
String[] itemsText = {"123", "345", "567"};
ArrayAdapter<String> mAdapter;
onCreate
mAdapter = new ArrayAdapter<String>(this, R.layout.roomitem,
R.id.itemTextView, itemsText);
setListAdapter(mAdapter);
itemsText = {"789", "910", "1011"};
sur clic
mAdapter.notifyDataSetChanged();
//it's dont work
Je pense que quelque chose comme ça
public void updatedData(List itemsArrayList) {
mAdapter.clear();
if (itemsArrayList != null){
for (Object object : itemsArrayList) {
mAdapter.insert(object, mAdapter.getCount());
}
}
mAdapter.notifyDataSetChanged();
}
Votre problème est une erreur typique Java avec les pointeurs.
Dans un premier temps, vous créez un tableau et passez ce tableau à l'adaptateur.
Dans la deuxième étape, vous créez un nouveau tableau (donc un nouveau pointeur est créé) avec de nouvelles informations mais l'adaptateur pointe toujours vers le tableau d'origine.
// init itemsText var and pass to the adapter
String[] itemsText = {"123", "345", "567"};
mAdapter = new ArrayAdapter<String>(..., itemsText);
//ERROR HERE: itemsText variable will point to a new array instance
itemsText = {"789", "910", "1011"};
Ainsi, vous pouvez faire deux choses, une, mettre à jour le contenu du tableau au lieu d'en créer une nouvelle:
//This will work for your example
items[0]="123";
items[1]="345";
items[2]="567";
... ou ce que je ferais, utiliser une liste, quelque chose comme:
List<String> items= new ArrayList<String>(3);
boundedDevices.add("123");
boundedDevices.add("456");
boundedDevices.add("789");
Et dans la mise à jour:
boundedDevices.set("789");
boundedDevices.set("910");
boundedDevices.set("1011");
Pour ajouter plus d'informations, dans une application réelle, vous mettez normalement à jour le contenu de l'adaptateur de liste avec les informations d'un service ou d'un fournisseur de contenu, donc normalement pour mettre à jour les éléments, vous feriez quelque chose comme:
//clear the actual results
items.clear()
//add the results coming from a service
items.addAll(serviceResults);
Avec cela, vous effacerez les anciens résultats et chargerez les nouveaux (pensez que les nouveaux résultats devraient avoir un nombre différent d'éléments).
Et bien sûr, après la mise à jour des données, l'appel à notifyDataSetChanged()
;
En cas de doute, n'hésitez pas à commenter.
En supposant que itemTexts soit un tableau String ou String ArrayList, où vous ajoutez de nouveaux éléments dans itemsTextat cette fois-là, vous pouvez appeler
mAdapter.notifyDataSetChanged();
Si vous n'avez pas obtenu de réponse, veuillez mettre du code.