Android提高篇之Adapter的抽象整合

最近在学习框架的知识,想根据公司业务的需要结合前台后台的特点,整出一个手机端的通用网络框架,所以就去学习下Simple哥的博客,看了网络框架的专栏。学习了分层和重构的优缺点。突然想到自己项目中大量的自定义Adapter中有大量的重复部分,是否可以把这些部分抽出来进行集中处理呢?下面我们就来试试。

1、我们定义一个所有Adapter的父类,继承在BaseAdapter

public abstract class CustomAdapter<T> extends BaseAdapter {        private List<T> listData;        public CustomAdapter(List<T> listData) {            this.listData = listData;        }        @Override        public int getCount() {            return listData == null ? 0 : listData.size();        }        @Override        public Object getItem(int arg0) {            return listData.get(arg0);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public abstract View getView(int position, View convertView, ViewGroup parent);    }

我们将getCount()、getItem()、getItemId()方法抽象出来进行处理,这样我们就减少了针对每个类的处理,减少代码的冗余度。我们只需要针对每个Adapter对getView()方法进行特殊处理即可。下面我们继承该CustomAdapter来自定义一个MyAdapter填充ListView。

2、自定义MyAdapter,进行填充数据处理。

public class MyAdapter extends CustomAdapter<String>{        private Context mContext;        private List<String> list;        public MyAdapter(Context context,List<String> listData) {            super(listData);            this.mContext = context;            this.list = listData;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            convertView = LayoutInflater.from(mContext).inflate(R.layout.text_layout, null);            TextView tv_text = (TextView) convertView.findViewById(R.id.tv_name);            tv_text.setText(list.get(position));            return convertView;        }    }

通过上面的整合,我们的MyAdapter中是不是少了很多冗余的代码,看起来也方便多了。下面就看看使用。

3、在MainActivity中进行使用。

public class MainActivity extends Activity {        private ListView listView;        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);            List<String> list = new ArrayList<String>();            for(int i=0;i<30;i++){                list.add("测试用例:" + i);            }            listView = (ListView) findViewById(R.id.listView);            final MyAdapter adapter = new MyAdapter(getApplication(), list);            listView.setAdapter(adapter);            listView.setOnItemClickListener(new OnItemClickListener() {                @Override                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,                        long arg3) {                    Toast.makeText(getApplication(), adapter.getItem(arg2).toString(),                             Toast.LENGTH_SHORT).show();                }            });        }    }

我们看下效果图:

简单的一个demo,算作学习框架基础的开始吧!确实提高了代码的简洁性,方便很多。再次向大家推荐学习下Simple哥的博客。

github地址,欢迎大家star

源码下载地址

作者:mr_dsw 欢迎转载,与人分享是进步的源泉!

转载请保留地址:http://blog.csdn.net/mr_dsw

更多相关文章

  1. Android(安卓)插件化框架DroidPlugin
  2. Android下的一种编程框架
  3. Handler学习
  4. 仅需6步,教你轻易撕掉app开发框架的神秘面纱(1):确定框架方案
  5. 开始努力学习Android的binder机制
  6. 临近毕业:Android(安卓)VS大数据Java的offer,我到底应该怎么选?
  7. Android(安卓)4.4 双显示屏支持实现思路(双屏异显)
  8. Android(安卓)主流开源框架(二)OkHttp 使用详解
  9. Android基础入门教程——7.1.2 Android(安卓)Http请求头与响应头

随机推荐

  1. How to build Android(安卓)Windows SDK
  2. Android(Java)正则表达式判断手机号、邮箱
  3. Android全屏显示
  4. Android资源文件mk的格式
  5. Android(安卓)使用IPC和后台Service通信
  6. android C++ 和 jni,根据JNIEnv的FindClas
  7. Android(安卓)控件界面转成Bitmap
  8. android断点续传实现方案之三
  9. android:程序中安装APK方法
  10. AndFire防火墙1.2版本发布