具有通用类的自定义android适配器 [英] Custom android adapter with generic class

查看:87
本文介绍了具有通用类的自定义android适配器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Android中创建通用适配器,因此无法一遍又一遍地编写它.

I'm trying to create a generic adapter in Android, so i can not write it over and over.

事情是,它正在运行,但是回收效果不是很好,它显示了我想要的内容,但是当我滚动时,它的排列顺序并不相同.

The thing is,it's working, but it's not recycling very well, it displays what i want but when i scroll, it's not in the same order.

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 {

}

}

推荐答案

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

You cannot keep only one instance of ViewHolder. You need to create new object everytime the convertView is null and 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;
}

这篇关于具有通用类的自定义android适配器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆