gpt4 book ai didi

Android ListView 使用 ViewHolder

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:41 24 4
gpt4 key购买 nike

我有一个问题。单击后,我试图更改 ListView 中的图标。它可以正常工作,但不仅不会修改单击的图标,还会修改未显示的图标。例如,如果我单击 ListView 第一项中的图标,第五个图标也会更改。对于以下所有项目( ListView 的每五个项目)重复此行为。这是我的 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, int resource, List<String> data) {
super(context, resource, 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, 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.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
}

关于Android ListView 使用 ViewHolder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24865169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com