android中常用的适配器,Android之万能适配器Adapter的使用

万能适配器

万能适配器共有两个部分:SuperViewHolder 和 SuperBaseAdapter

万能的ViewHolderpublic class SuperViewHolder {

private SparseArray mViews;

private View mConvertView;

private int mPosition;

public SuperViewHolder(Context context, ViewGroup parent, int layoutId, int position) {

mPosition = position;

mViews = new SparseArray<>();

mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);

mConvertView.setTag(this);

}

public static SuperViewHolder make(Context context, int layoutId, View convertView, ViewGroup parent, int position) {

if (convertView == null) {

return new SuperViewHolder(context, parent, layoutId, position);

} else {

SuperViewHolder superViewHolder = (SuperViewHolder) convertView.getTag();

superViewHolder.mPosition = position;

return superViewHolder;

}

}

public T getView(int viewId) {

View view = mViews.get(viewId);

if (view == null) {

view = mConvertView.findViewById(viewId);

mViews.put(viewId, view);

}

return (T) view;

}

public int getPosition() {

return mPosition;

}

public View getConvertView() {

return mConvertView;

}

}

万能的SuperBaseAdapterpublic abstract class SuperBaseAdapter extends BaseAdapter {

protected Context mContext;

protected List mDatas;

public SuperBaseAdapter(Context context, List datas) {

mContext = context;

mDatas = datas;

}

@Override

public int getCount() {

return mDatas.size();

}

@Override

public Object getItem(int position) {

return mDatas.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public abstract View getView(int position, View convertView, ViewGroup parent);

}

结合使用 SuperViewHolder 和 SuperBaseAdapterclass CalendarBaseAdapter extends SuperBaseAdapter {

public CalendarBaseAdapter(Context context, List datas) {

super(context, datas);

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

SuperViewHolder superViewHolder = SuperViewHolder.make(mContext, R.layout.item_calendar, convertView, parent, position);

((TextView)superViewHolder.getView(R.id.calendar_time)).setText(mDatas.get(position));

return superViewHolder.getConvertView();

}

}

补充问题// 焦点抢占

关于在ListView的Item里增加(例CheckBox对象)造成Item无法点击问题

此问题是因为CheckBox对象抢占了Item的焦点,造成Item无法点击的

只需要在将CheckBox对象android:focusable属性值设置为false即可// 复用导致内容错乱

比如: 当Item中使用CheckBox时点击第一个则其它CheckBox也被选中了

这是因为使用的是同一个CheckBox对象的缘故 ...

解决: 这样就需要记录CheckBox对象的状态来判断CheckBox是否被选中

可以通过position来作为ID,来记录CheckBox状态是True或False

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值