首页 > 其他 > 详细

第五章 使用数据适配器

时间:2015-12-06 19:14:16      阅读:178      评论:0      收藏:0      [点我收藏+]

Adapter 是数据源与UI组件之间的纽带

 

Adapter:四种:

      ArrayAdapter:只能显示一行文字  操作简单

      SimpleAdapter:支持自定义布局 

      SimpleCursorAdapter:处理Cursor中的数据

      BaseAdapter:支持更复杂的布局

                      需要自行提供列表布局文件,还需自行编写适配器类

     

      ArrayAdapter、SimpleAdapter、SimpleCursorAdapter都是 BaseAdapter的子类

     

      SimpleCursorAdapter不是SimpleAdapter的子类!

     

BaseAdapter      :常用于被继承

四个要实现的方法:

      public int getCount() ------返回List的条目数,一般为数据源的大小

      public Object getItem(int position) ------获取数据集中指定位置的数据项

      public  long getItemId(int position) ----获取数据集中指定位置数据项的id

      public View getView(int position, View convertView, ViewGroup parent) ----获取显示数据集中指定位置数据项的View 对象。

     

     

View对象的获取方法:View.inflate(con,R.layout.XXX,null);-----将一个布局文件渲染成一个View对象

 

convertView 缓存。当首次加载Item的时候将布局文件渲染到缓存中如果缓存文件不为空,那么通过缓存文件来获取内部组件并修改其内容。

 

焦点的问题:当ListView中有Button,Checkbox,EditText的时候,以上控件会占有焦点,导致listView的Item点击失效,

                 解决办法:在布局文件中加属性使其失去焦点。

      android:focusable="false"    //focus n. 焦点;中心;清晰;焦距

    android:focusableInTouchMode="false"

 

 

           案例代码:

                 在package com.example.administrator.baseadapterdemo.custom 中

                      创建MyAdapter extends BaseAdapter

 1 public class MyAdapter extends BaseAdapter
 2 {
 3     private Context context;//用于接收传递过来的Context对象
 4     private List list;//用于接收传递过来的数据集合
 5 
 6     public MyAdapter(Context context, List list)
 7     {
 8         this.context = context;
 9         this.list = list;
10     }
11 
12     /**
13      * 获取list(listview)的条目的数量
14      * 固定写法
15      * @return
16      */
17     @Override
18     public int getCount()
19     {
20         return list.size();
21     }
22 
23     /**
24      * 返回条目(list中存储的某一条对象数据)
25      * 固定写法
26      * @param position //position n 位置
27      * @return
28      */
29     @Override
30     public Object getItem(int position)
31     {
32         return list.get(position);
33     }
34 
35     /**
36      * 返回条目id(list中存储的某一条对象数据在list中的位置)
37      * 固定写法
38      * @param position
39      * @return
40      */
41     @Override
42     public long getItemId(int position)
43     {
44         return position;
45     }
46 
47     /**
48      * 自定义ViewHolder内部类 为了减少findviewbyid的次数,封装控件的引用
49      */
50     private class ViewHolder
51     {
52         private TextView tv_name, tv_age;
53     }
54 
55     /**
56      * 返回显示数据集中指定位置数据项的View 对象
57      * @param position
58      * @param convertView //旧的View重用   convert  vt. 使转变;转换…;使…改变信仰
59      * @param parent
60      * @return
61      */
62     @Override
63     public View getView(int position, View convertView, ViewGroup parent)
64     {
65         ViewHolder viewHolder = null;//申明viewHolder对象
66         if (convertView == null)//第一次进入 convertView复用组件为空,view无复用时
67         {
68             viewHolder = new ViewHolder();//创建viewHolder对象
69             //
70             //相当于自建组件view,填充给convertView
71             //static View inflate(Context context, @LayoutRes int resource, ViewGroup root)
72             //
73             convertView = View.inflate(context, R.layout.item_baseadapter, null);//inflate vt. 使充气;使通货膨胀
74             //给viewHolder里的组件赋值
75             viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
76             viewHolder.tv_age = (TextView) convertView.findViewById(R.id.tv_age);
77             //保存viewHolder, tag n 标签
78             convertView.setTag(viewHolder);
79         } else//convertView复用组件不为空, view复用时
80         {
81             //取出前面保存的viewHolder
82             viewHolder = (ViewHolder) convertView.getTag();
83         }
84 
85         //获取数据集中指定位置数据项的person对象,并将值放入viewHolder对应的组件中
86         Person person = (Person) getItem(position);
87         Log.e("getView()当前条目为:", person.toString());
88         viewHolder.tv_name.setText(person.getName());
89         viewHolder.tv_age.setText(person.getAge() + "");
90 
91         return convertView;
92     }
93 }

 

                       

第五章 使用数据适配器

原文:http://www.cnblogs.com/starman/p/5024065.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!