Android提高篇之Adapter的抽象整合
16lz
2021-01-26
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
更多相关文章
- Android(安卓)插件化框架DroidPlugin
- Android下的一种编程框架
- Handler学习
- 仅需6步,教你轻易撕掉app开发框架的神秘面纱(1):确定框架方案
- 开始努力学习Android的binder机制
- 临近毕业:Android(安卓)VS大数据Java的offer,我到底应该怎么选?
- Android(安卓)4.4 双显示屏支持实现思路(双屏异显)
- Android(安卓)主流开源框架(二)OkHttp 使用详解
- Android基础入门教程——7.1.2 Android(安卓)Http请求头与响应头