Ich habe ein Problem. Ich versuche ein Symbol in meiner Listenansicht zu ändern, nachdem es angeklickt wurde. Es funktioniert korrekt, obwohl nicht nur die angeklickten Symbole geändert werden, sondern auch diejenigen, die nicht angezeigt werden. Wenn ich beispielsweise auf das Symbol im ersten Element der Listenansicht klicke, ändert sich auch das fünfte Symbol. Dieses Verhalten wird für alle folgenden Elemente (alle fünf Elemente der Listenansicht) wiederholt. Das ist mein getView Methode:Android Listview mit ViewHolder
public class AlphabeticalAdapter extends ArrayAdapter<String>
{
int layoutResourceId;
private final Context context;
private List<String> data;
private ProgressDialog mProgressDialog;
private ImageView downloadImageButton;
public AlphabeticalAdapter(Context context, int resource, List<String> data){
super(context, resource, data);
this.layoutResourceId = resource;
this.context = context;
this.data = data;
}
public View getView(int position, View convertView, ViewGroup parent) {
// View rowView = convertView;
final ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.catalogslist_single_row, parent, false);
viewHolder = new ViewHolder();
viewHolder.catlogTitle=(TextView)convertView.findViewById(R.id.txtTitle);
viewHolder.icon=(ImageView)convertView.findViewById(R.id.imageView2);
viewHolder.downloadImageButton=(ImageView)convertView.findViewById(R.id.downloadImageButton);
//downloadImageButton = (ImageView)rowView.findViewById(R.id.downloadImageButton);
viewHolder.position = position;
viewHolder.downloadImageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("DOWNLOAD PRESSED");
viewHolder.downloadImageButton = (ImageView)v.findViewById(R.id.downloadImageButton);
viewHolder.downloadImageButton.setImageResource(R.drawable.icon_ok);
viewHolder.downloadImageButton.setTag("downloaded");
//rowView.setTag("downloaded");
}
});
convertView.setTag(viewHolder);
}
else{
viewHolder= (ViewHolder)convertView.getTag();
}
viewHolder.catlogTitle.setText(data.get(position));
viewHolder.catlogTitle.setTypeface(regularDin);
viewHolder.icon.setImageResource(R.drawable.cata);
if(viewHolder.downloadImageButton.getTag() == "downloaded"){
downloadImageButton = (ImageView)convertView.findViewById(R.id.downloadImageButton);
downloadImageButton.setImageResource(R.drawable.icon_ok);
}
else{
downloadImageButton = (ImageView)convertView.findViewById(R.id.downloadImageButton);
downloadImageButton.setImageResource(R.drawable.icon_download);
}
viewHolder.position = position;
return convertView;
} //close getView
...
Und das ist meine ViewHolder Klasse:
static class ViewHolder{
ImageView downloadImageButton;
TextView catlogTitle;
ImageView icon;
int position;
}
habe ich versucht, diese Lösung, aber es funktioniert nicht :-( – Mark
@ Mark i mein Code bearbeitet, finden Sie diese und sagen seine Hilfe Sie –
Das ist falsch. Lesen Sie meine Antwort zu verstehen, warum. Es Anzahl der ViewHolder-Objekte nicht gleich der Anzahl der Zeilen. Was würde sonst das ViewHolder-Muster bedeuten? – kupsef