Dans la semaine dernière, j'essaie juste de résoudre ce problème. Voir toutes les questions similaires et je ne sais pas pourquoi, les solutions ne fonctionnent pas pour moi.
J'ai une vue de liste et chaque élément a une vue d'image. Lorsque cliqué sur la vue Image, je veux modifier la ressource d'image. bien. terminé. Mais lorsque le défilement, les ressources d'image changent.
Mon code complet est: } p> où j'ai une erreur? P> P>
5 Réponses :
Ceci est parce que lorsque vous Scroll ListView System Android Créez toujours une nouvelle ligne et détruisez des lignes non visibles. Vous devez modifier GeveView () comme ci-dessous, tout ira bien:
@Override public View getView(int position, View view, ViewGroup parent) { View vi = view; final ViewHolder holder ; LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); if(view==null){ vi = inflater.inflate(R.layout.customlistitem,null); holder = new ViewHolder(); holder.titr = (TextView) vi.findViewById(R.id.listtext); holder.image = (ImageView) vi.findViewById(R.id.listimg); holder.image.setTag(position); vi.setTag(holder); } else{ holder = (ViewHolder) vi.getTag(); } holder.titr.setText(items.get(position)); if(sp.getBoolean("position="+position, false)){ v.setBackgroundResource(R.drawable.fav_ic); } holder.image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { v.setBackgroundResource(R.drawable.fav_ic); SharedPreferences.Editor edit = sp.edit(); edit.putBoolean("position="+position, true); edit.commit(); } }); return vi; }
Vous devez utiliser une valeur booléenne dans le titulaire pour vérifier si votre image d'arrière-plan est définie ou non pour une rangée particulière.
titulaire em> p> espère que cela aidera. p> p>
Vous devez définir layoutinflater dans le constructeur car GeveView () Appelez chaque ligne afin que vous définissez layoutinflater dans GeView () puis layoutinflater définir à nouveau et encore pour chaque ligne. p>
Essayez ceci, Ajouter Classe de modèle: P> public class Items {
int drawableImage;
String strTxt;
public Items(int drawableImage) {
this.drawableImage = drawableImage;
}
public int getDrawableImage() {
return drawableImage;
}
public void setDrawableImage(int drawableImage) {
this.drawableImage = drawableImage;
}
public String getStrTxt() {
return strTxt;
}
public void setStrTxt(String strTxt) {
this.strTxt = strTxt;
}
}
Ce code a fière allure. mais en ligne: 'items.set (position) .SetDrawableImage (R.Drawable.fav_ic);' devrait changer les articles.get ()
Merci. votre code est correct. Mon problème est résolu.
Oui, ce problème apparaît toujours dans Vous avez deux choix: p>
second fort> Un, j'ai recommandé celui-ci et utilisez-le dans mon code, vous pouvez utiliser listview code> car Android détruisent et recrée des lignes de recrée. P>
recyclerview code>, ce problème n'arrivera pas avec elle. p>