我有个问题.点击后我试图在列表视图中更改图标.它可以正常工作,虽然不会仅修改单击的图标,但也不会修改那些未显示的图标.例如,如果我单击列表视图的第一项中的图标,则第五个图标也会更改.对于以下所有项目(列表视图的每五个项目)重复此行为.
这是我的getView方法:
这是我的getView方法:
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
…
这是我的ViewHolder类:
static class ViewHolder{ ImageView downloadImageButton; TextView catlogTitle; ImageView icon; int position; }
解决方法
在下面更改您的代码.我想你错过了.
public class AlphabeticalAdapter extends ArrayAdapter<String> { int layoutResourceId; private final Context context; private List<String> data; private List<String> tags; private ProgressDialog mProgressDialog; private ImageView downloadImageButton; public AlphabeticalAdapter(Context context,List<String> data) { super(context,data); this.layoutResourceId = resource; this.context = context; this.data = data; tags = new ArrayList<String>(); int size = data.size(); for (int i = 0; i < size; i++) { tags.add("tag"); } } static class ViewHolder { ImageView downloadImageButton; TextView catlogTitle; ImageView icon; int position; } public View getView(final int position,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.position = position; viewHolder.downloadImageButton .setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { System.out.println("DOWNLOAD PRESSED"); viewHolder.downloadImageButton.setTag("downloaded"); tags.add(position,"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 (tags.get(position) == "downloaded") { downloadImageButton.setImageResource(R.drawable.icon_ok); } else { downloadImageButton.setImageResource(R.drawable.icon_download); } viewHolder.position = position; return convertView; } // close getView }