fei-ke
8/19/2014 - 6:54 AM

适用于ItemView的列表适配器

适用于ItemView的列表适配器


/**
 * 适用于ItemView的列表适配器
 * Created by fei-ke on 2014/8/19.
 */
public class AbsItemAdapter<T extends IItemView, K extends IItemBean> extends BaseAdapter {
    private List<K> mData;
    private Class<T> itemViewClass;

    public AbsItemAdapter(Class<T> itemViewClass) {
        this.itemViewClass = itemViewClass;
    }

    @Override
    public int getCount() {
        return mData == null ? 0 : mData.size();
    }

    @Override
    public K getItem(int position) {
        return mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        T itemView = null;
        if (convertView == null) {
            itemView = getItemViewInstance(parent.getContext());
        } else {
            itemView = (T) convertView;
        }
        K item = getItem(position);
        itemView.bindValue(item);
        return itemView.getView();
    }

    private T getItemViewInstance(Context context) {
        T itemView = null;
        try {
            Method methodNewInstance = itemViewClass.getMethod("newInstance", Context.class);
            itemView = (T) methodNewInstance.invoke(itemViewClass, context);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return itemView;
    }

    public void update(List<K> beans) {
        if (mData == null) {
            mData = new ArrayList<K>();
        }
        mData.clear();
        loadMore(beans);
    }

    public void loadMore(List<K> beans) {
        if (mData == null) {
            mData = new ArrayList<K>();
        }
        mData.addAll(beans);
        notifyDataSetChanged();
    }
}
/**
 * Created by fei-ke on 2014/8/19.
 */
public interface IItemBean {
}


/**
 * 同于AbsItemAdapter的ItemView
 * Created by fei-ke on 2014/8/19.
 */
public interface IItemView<T extends IItemBean> {
    public void bindValue(T itemBean);

    public View getView();
}