SimpleAdapter 使用

SimpleAdapter 顾名思义,简单的数据适配器,被用来做简单的数据展示,它可以将静态数据映射到XML定义好的视图上。先看构造函数:

public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
第一个参数是上下文,第二个参数是由Map组成的数据集合,第三个参数是布局文件的资源id,第四个参数是数据源的key值集合,对应第二个参数里面map的键名称,第五个参数是要映射的视图资源id。

看完构造函数就大概知道SimpleAdapter的使用场景和使用方法了。接下来通过源码看一下视图绑定过程.
final Map dataSet = mData.get(position);// 找到对应的position位置的map数据

//将外部实现的绑定传入,SimpleAdapter能够实现 checkBox,CheckedTextView,TextView ,ImageView
final ViewBinder binder = mViewBinder;
final String[] from = mFrom;
final int[] to = mTo;
final int count = to.length;
//循环找控件,然后取到值赋给相应控件
for (int i = 0; i < count; i++) {
 final View v = view.findViewById(to[i]);
  if (v != null) {
  final Object data = dataSet.get(from[i]);
  String text = data == null ? "" : data.toString();
  if (text == null) {
text = "";
  }
   boolean bound = false;
   if (binder != null) {
       bound = binder.setViewValue(v, data, text);
   }
  //如果满足if (!bound)那么bound就还是false,说明是普通数据
  if (!bound) {  //查看v是不是Checkable的实例化类型,满足的情况可能是CheckBox,CheckedTextView
 if (v instanceof Checkable) {  //如果数据类型是boolean,那么就是CheckBox
 if (data instanceof Boolean) {  ((Checkable) v).setChecked((Boolean) data);  //如果不是CheckBox,那么判断是不是继承                                TextView的CheckedTextView,是的话赋值,不是就抛出异常
        } else if (v instanceof TextView) {
   setViewText((TextView) v, text);
   } else {
          throw new IllegalStateException( );
   }
   //如果不是Checkable的实例化类型,判断是不是TextView的实例化类型
 } else if (v instanceof TextView) {
    setViewText((TextView) v, text){ //都不是以上情况,就判断一下是不是ImageView的实例化类型
 } else if (v instanceof ImageView) { //这里只满足数据类型为int也就是R.drawable.ic,和String类型的url,如果想实现直接用drawbale,就要实现ViewBinder
 if (data instanceof Integer) {
     setViewImage((ImageView) v, (Integer) data);
 } else {
     setViewImage((ImageView) v, text);
  }
 } 

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值