反射实现适配器的封装

本文探讨如何使用反射技术来实现适配器的封装,以提高代码的复用性和减少不必要的代码量,从而提升软件开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.通过封装我们可以减少代码的复用率,同时我们也可以减少代码量。

public abstract class CommonAdapter<T,VD extends CommonAdapter.ViewHolder> extends BaseAdapter {
    private Context context;
    private int layoutId;
    private LayoutInflater inflater;
    private List<T> list;

    public CommonAdapter(Context context, int layoutId, List<T> list) {
        this.context = context;
        this.layoutId = layoutId;
        this.list = list;
        inflater =LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {

        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        T d = list.get(position);
        Class<?> aClass = d.getClass();
        Field id = null;
        try {
            id = aClass.getField("id");
        } catch (NoSuchFieldException ignored) {
        }
        if (id == null) {
            try {
                id = aClass.getDeclaredField("id");
            } catch (NoSuchFieldException ignored) {
            }
        }
        if (id != null) {
            try {
                return (long) id.get(d);
            } catch (IllegalAccessException ignored) {
            }
        }
        Method getId = null;
        try {
            getId = aClass.getMethod("getId");
        } catch (NoSuchMethodException ignored) {
        }
        if (getId == null) {
            try {
                getId = aClass.getDeclaredMethod("getId");
            } catch (NoSuchMethodException ignored) {
            }
        }
        if (getId != null) {
            try {
                return (long) getId.invoke(d);
            } catch (Exception ignored) {
            }
        }
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflater.inflate(layoutId,parent,false);
            ParameterizedType superclass = (ParameterizedType) getClass().getGenericSuperclass();
            Class type = (Class) superclass.getActualTypeArguments()[1];
            try {
                Constructor constructor = type.getConstructor(View.class);
                Object o = constructor.newInstance(convertView);
                convertView.setTag(o);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        onBindView(list.get(position), ((VD) convertView.getTag()));
        return convertView;
    }
    public abstract void onBindView(T entry,VD viewHolder);
    public static class ViewHolder{
        private View viewHolder;
        public ViewHolder(View viewHolder) {
            this.viewHolder = viewHolder;
        }
    }
    public void addAll(Collection<? extends T> collection){
        list.addAll(collection);
        notifyDataSetChanged();
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值