Je rencontre un problème avec un ListActivity. J'ai étendu ArrayAdapter et Overridden getView pour remplir les données pour chaque ligne. Je jette quelques données de ArrayList de ma carte dans un TextView.Hors de contrôle ListView
Mon problème est, lorsque je défile, le TextView de chaque ligne remplit avec du texte qui ne figure pas dans ses données correspondantes dans ArrayList. Ce que je veux dire est: dis que j'ai une rangée en haut de ma liste avec un TextView qui est rempli avec emptystring. Si je suis au bas de ma liste et que je vois une ligne avec un TextView rempli de "bob" et que je clique pour faire défiler vers le haut, la ligne en haut peut maintenant avoir "bob" dans son TextView, mais les données à cet index de ma ArrayList ne contient pas "bob". Il contient emptystring (en fait null). Si je continue à faire défiler vers le haut et vers le bas, les autres lignes vont peupler (ou effacer) avec des données qui ne correspondent pas à ce qui se trouve dans ArrayList de l'adaptateur.
Pour que cela se produise, je n'ai pas besoin de faire défiler le ListView rapidement. Cependant, il semble que plus je défile rapidement, plus les lignes sont corrompues.
Voici mon code. Je me rends compte que j'utilise findViewById chaque fois que getView est appelé, mais ce n'est pas la question. Je l'appelle contre convertView; donc ça devrait être saisir le bon TextView sur chaque ligne, oui?
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// get the View for this list item
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.layout_mylistlist_item, null);
}
// get the next object
MyListItem myItem = m_items.get(position);
// set up the list item
if (myItem != null) {
TextView txtName = (TextView) v.findViewById(R.id.mylist_name);
// set text
if (txtName != null && myItem.getName() != null) {
txtName.setText(myItem.getName());
}
}
// return the created view
return v;
}
Si je supprime myItem.getName()! = Null de l'if-block près du bas, le problème semble s'arrêter. Je ne comprends pas pourquoi. – Andrew
J'ai eu exactement le même problème. J'ai supprimé la vérification 'if (v == null)' et cela fonctionne très bien – Falmarri
La suppression de la commande getName()! = Null force le texte textView à être écrasé. la suppression de la vérification v == null recrée l'ensemble de la mise en page. Dans tous les cas, le texte est effacé.Voir ma réponse pour un correctif plus fiable et une explication complète – CodeFusionMobile