我的自定义ListView适配器有问题。我想使用ViewHodler(因为我的listview有100多个元素),但是当我使用我的代码时,我的listview循环。通过循环我的意思是它只显示初始位置并循环它们的外观直到listview的结尾。我在本网站上提出建议:Click。
这是我的代码:
public class ListList extends ArrayAdapter<String>{
private final String[] web;
private final Integer[] imageId;
Context context;
public ListList(Context context,
String[] web, Integer[] imageId) {
super(context, R.layout.champion_list, web);
this.context = context;
this.web = web;
this.imageId = imageId;
}
@Override
public View getView(int position, View v, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
if(v == null) {
LayoutInflater inflater = LayoutInflater.from(context);
v = inflater.inflate(R.layout.champion_list, null);
holder.txt = (TextView)v.findViewById(R.id.txt);
holder.img = (ImageView)v.findViewById(R.id.img);
holder.txt.setText(web[position]);
holder.img.setImageResource(imageId[position]);
v.setTag(holder);
}
else {
// View recycled !
// no need to inflate
// no need to findViews by id
holder = (ViewHolder) v.getTag();
}
return v;
}
static class ViewHolder {
TextView txt;
ImageView img;
}
}
我做错了什么想法?我尝试从if语句中输出.setText和.setImageResource并且它可以工作,但是根据这个网站我做错了...你也可以给我任何提示如何制作listview&#34;无滞后&#34;?提前谢谢。
答案 0 :(得分:0)
试试这个:
ViewHolder holder = new ViewHolder();
if(v == null) {
LayoutInflater inflater = LayoutInflater.from(context);
v = inflater.inflate(R.layout.champion_list, null);
holder.txt = (TextView)v.findViewById(R.id.txt);
holder.img = (ImageView)v.findViewById(R.id.img);
v.setTag(holder);
}
else {
holder = (ViewHolder) v.getTag();
}
//move here
holder.txt.setText(web[position]);
holder.img.setImageResource(imageId[position]);
因为您只在适配器加载第一个项目时设置文本和图像(下一个项目将重新使用持有者)