安卓开发笔记——打造万能适配器(Adapter)
2015-04-18 17:01
375 查看
为什么要打造万能适配器?
在安卓开发中,用到ListView和GridView的地方实在是太多了,系统默认给我们提供的适配器(ArrayAdapter,SimpleAdapter)经常不能满足我们的需要,因此我们时常要去继承BaseAdapter类去实现一个自定义的适配器来满足我们的场景需要。
如果你是开发一个简单点的APP还好,可能ListView和GridView的数量不会太多,我们只要去写几个BaseAdapter实现类就可以了。
但如果有一天,你需要开发一个APP里面具有几十个ListView或者GridView的子页面,此时的你该怎么办?每个ListView或者GridView都去写一个适配的Adatper类吗?
当然你如果想做蛮牛不嫌累的话也不是不可以,但如果有办法可以让自己减少很多工作量,避免做重复无意义劳动,何乐而不为呢?
万能适配器思想?
软件设计模式:模板方法模式(有兴趣了解的朋友,可以参考看下我之前写过的博文《软件设计模式之模板方法模式(JAVA)》)
其实解决问题的核心思想很简单,一句话:抽取重复代码!
我们在继承BaseAdapter类时,都需要去实现它里面的抽象方法(
而这个getView方法里,我们考虑到性能的问题,我们经常会引入一个ViewHolder类(关于不清楚ViewHolder的朋友可以看看我之前写过的博文《安卓开发笔记——ListView加载性能优化ViewHolder》),尽可能的去节省资源。
那么解决问题的思路就出来了,我们可以把这个适配器抽取成2部分:
第一部分是解决(getCount, getItem, getItemId)方法里重复代码的问题。
第二部分是分离getView方法里使用到的ViewHolder,把它单独抽取出来成一个独立的类,利用键值对Key=>Value的方法,以控件ID去寻找对应的View对象。
如果你看完以上这些感觉已经云里来雾里去,没关系,接下去我们用代码说话。
传统适配器的实现方式:
View Code
就像这样,以后如果需要使用适配器Adapter就不需要再去继承BaseAdapter了,直接继承CommonAdapter配合CommonViewHolder就可以了。
在安卓开发中,用到ListView和GridView的地方实在是太多了,系统默认给我们提供的适配器(ArrayAdapter,SimpleAdapter)经常不能满足我们的需要,因此我们时常要去继承BaseAdapter类去实现一个自定义的适配器来满足我们的场景需要。
如果你是开发一个简单点的APP还好,可能ListView和GridView的数量不会太多,我们只要去写几个BaseAdapter实现类就可以了。
但如果有一天,你需要开发一个APP里面具有几十个ListView或者GridView的子页面,此时的你该怎么办?每个ListView或者GridView都去写一个适配的Adatper类吗?
当然你如果想做蛮牛不嫌累的话也不是不可以,但如果有办法可以让自己减少很多工作量,避免做重复无意义劳动,何乐而不为呢?
万能适配器思想?
软件设计模式:模板方法模式(有兴趣了解的朋友,可以参考看下我之前写过的博文《软件设计模式之模板方法模式(JAVA)》)
其实解决问题的核心思想很简单,一句话:抽取重复代码!
我们在继承BaseAdapter类时,都需要去实现它里面的抽象方法(
getCount, getItem, getItemId, getView),其中除了getView这个方法里需要实现的代码不同,其他的都一样。
而这个getView方法里,我们考虑到性能的问题,我们经常会引入一个ViewHolder类(关于不清楚ViewHolder的朋友可以看看我之前写过的博文《安卓开发笔记——ListView加载性能优化ViewHolder》),尽可能的去节省资源。
那么解决问题的思路就出来了,我们可以把这个适配器抽取成2部分:
第一部分是解决(getCount, getItem, getItemId)方法里重复代码的问题。
第二部分是分离getView方法里使用到的ViewHolder,把它单独抽取出来成一个独立的类,利用键值对Key=>Value的方法,以控件ID去寻找对应的View对象。
如果你看完以上这些感觉已经云里来雾里去,没关系,接下去我们用代码说话。
传统适配器的实现方式:
package com.example.listviewtest; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; public class MainActivity extends Activity { private ListView listView; private MyAdapter adapter; private List<User> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化 listView=(ListView) findViewById(R.id.listview); list=new ArrayList<User>(); //模拟数据源 for(int i=0;i<10;i++){ User user=new User(); user.setName("用户"+i); user.setPhone("10000"+i); list.add(user); } adapter=new MyAdapter(MainActivity.this, list,R.layout.listview_item); listView.setAdapter(adapter); } }
View Code
就像这样,以后如果需要使用适配器Adapter就不需要再去继承BaseAdapter了,直接继承CommonAdapter配合CommonViewHolder就可以了。
相关文章推荐
- android 开发零起步学习笔记(二十四):Android:打造“万能”Adapter与ViewHolder
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- android开发笔记之打造终极适配器
- 打造万能Adapter(适配器)——适用于ListView、GridListView
- 安卓学习笔记之实现通用的适配器(adapter)与ViewHolder
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- 如何打造Listview万能适配器adapter