ListView,GridView 和 适配器 Adapter

                                                                                    

        由图能够看到在Android中与Adapter有关的全部接口、类的完整层级图。在咱们使用过程当中能够根据本身的需求实现接口或者继承类进行必定的扩展。比较经常使用的有 BaseAdapter,SimpleAdapter,ArrayAdapter,SimpleCursorAdapter等。数据库

BaseAdapter是一个抽象类,继承它须要实现较多的方法,因此也就具备较高的灵活性;数组

ArrayAdapter支持泛型操做,最为简单,只能展现一行字。函数

SimpleAdapter有最好的扩充性,能够自定义出各类效果。布局

SimpleCursorAdapter能够适用于简单的纯文字型ListView,它须要Cursor的字段和UI的id对应起来。如须要实现更复杂的UI也能够重写其余方法。能够认为是SimpleAdapter对数据库的简单结合,能够方便地把数据库的内容以列表的形式展现出来。优化

SimpleAdapter:spa

ArrayAdapter比较简单,这里就不说了,简单说一下SimpleAdapter,SimpleAdapter能够直接使用,下面介绍一下                        SimpleAdapter中参数的含义xml

 new SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to                context    :这个表示上下文继承

            data   :填充的数据,一个Map集合中的数据表明在一个条目的数据,每个条目的数据都以键值对的方式存入到                                Map集合中,而后再放到List集合中,
接口

            resource:条目的布局文件
事件

            from:这个字符串数组里面存放的是 map集合中的键 ,用于在Adapter中取出数据用的

            to    :这个int数组 存放的是条目布局中个个组件的id ,但顺序要与from中的 键相对于,即这个组件的数据在                                Map中的键要与这个组件的 id 对应。方便在Adaper中为其添加数据


BaseAdapter:

        通常自定义适配器都用BaseAdapter,首先继承这个抽象类,而后实现其方法

如图,这是一个自定义的Adapter,他的功能和SimpleAdapter相似。这里须要写一个构造函数和覆盖父类的方法。构造方法中的参数和SimpleAdapter的同样,下面介绍一下覆盖的方法的含义

        getCount(): 返回data的大小,即条目的总数

        getItem():返回当前条目的数据,这里返回的Map集合,也可返回具体数据

        getItemId():返回当前位置的 条目Id 这里直接返回位置便可,由于位置也是惟一的

        getView():这个方法是用对条目来填充数据,而后将填充好的数据返回

在getView中能够为组件设置单击事件,这样就能够响应组件的点击事件。但要注意的是,须要将组件设置为不可获取焦点,但可点击,这个能够直接在xml文件clickable="boolean",focusable=“boolean”。由于若是获取焦点的话会夺去ListView获取GridView 的焦点,而后条目不可点击了。值得注意的是TextView默认状况下clickable,focusable都为false,Button都为true。

        

HandleView是用来优化的,避免findViewById()这条语句的重复执行,原理就是将获取的组件放入HandleView中,而后再将HandleView放入convertView的Tag中,用的时候在取出


ListView 和 GridView 的 setOnItemClickListener 方法设置的是条目监听,只能监听条目,不能监听条目中的组件,因此要自定义适配器,在getView中添加条目中组件的监听事件,而SimpleAdapter却不能,这就是自定义Adapter的优势

相关文章
相关标签/搜索