【问题标题】:Custom android adapter with generic class具有通用类的自定义 android 适配器
【发布时间】:2014-07-28 11:53:04
【问题描述】:

我正在尝试在 Android 中创建一个通用适配器,所以我不能一遍又一遍地编写它。

问题是,它正在工作,但它不能很好地回收,它显示了我想要的,但是当我滚动时,它的顺序不同。

public class CustomListViewAdapter<T> extends BaseAdapter {

private List<T> objects;
private LayoutInflater inflater;
private int resources;
private AdapterCommand<T> listener;
private ViewHolder h;

public CustomListViewAdapter(Context context, List<T> objects,
        int resources, AdapterCommand<T> listener, ViewHolder h) {
    this.h = h;
    this.listener = listener;
    this.resources = resources;
    this.objects = objects;
    inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return objects.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return objects.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View v = convertView;
    if (v == null) {
        v = inflater.inflate(resources, parent, false);
        listener.init(v, h);
        v.setTag(h);
    } else {
        h = (ViewHolder) v.getTag();
    }
    T object = (T) getItem(position);
    listener.execute(object, h);
    return v;
}

public interface AdapterCommand<T> {
    public void init(View v, ViewHolder h);

    public void execute(T object, ViewHolder h);
}

public static interface ViewHolder {

}

}

【问题讨论】:

标签: android android-adapter


【解决方案1】:

您不能只保留一个 ViewHolder 实例。每次 convertView 为 null 和 setTag 时,您都需要创建新对象。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View v = convertView;
    ViewHolder h;
    if (v == null) {
        v = inflater.inflate(resources, parent, false);
        h = new ViewHolder();
        listener.init(v, h);
        v.setTag(h);
    } else {
        h = (ViewHolder) v.getTag();
    }
    T object = (T) getItem(position);
    listener.execute(object, h);
    return v;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    相关资源
    最近更新 更多