カスタム ListView アダプターに問題があります。ViewHolder を使用したいのですが (リストビューには 100 個以上の要素があるため)、コードを使用するとリストビューがループします。ループとは、最初の位置のみを表示し、リストビューの最後までその外観をループすることを意味します。私はこのサイトから提案していました:クリックしてください。
これは私のコードです:
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 を入れてみましたが、うまくいきましたが、このサイトによると、私は間違っています... また、リストビューを「ラグフリー」にするためのヒントを教えてください。