BaseAdapter的简单封装
2016-04-20 16:48
316 查看
继承BaseAdapter的抽象类(根据需求进行添加方法)
继承封装的适配器代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104101eb845106107108109110111112113 | public abstract class MyBaseAdapter<T> extends BaseAdapter{ public List<T> list; public Context context; public MyBaseAdapter(Context context,List<T> list) { this .list = list; this .context = context; } @Override public int getCount() { return list != null ? list.size() : 0 ; } @Override public Object getItem( int position) { return list.get(position); } @Override public long getItemId( int position) { return position; } /** *入口,第一步 */ @Override public View getView( int position, View convertView, ViewGroup parent) { //实现抽象方法创建ViewHolder,并返回ViewHolder执行getItemView方法返回的视图 return createViewHoler(position, convertView, parent).getItemView(); } /** * 创建ViewHolder的抽象方法 * @param position * @param convertView * @param parent * @return */ public abstract ViewHolder createViewHoler( int position, View convertView, ViewGroup parent); /** * ViewHolder类 */ public static class ViewHolder { private View convertView; //保存View的map private HashMap<Integer, View> views; private Context context; /** *第四步:ViewHolder的私有构造器 */ private ViewHolder(Context context, View convertView) { this .convertView = convertView; this .views = new HashMap<>(); this .context = context; //设置tag convertView.setTag( this ); } /** *第三步:提供给外界获取ViewHolder的方法(使用优化重用布局) */ public static ViewHolder getHolder(View convertView, Context context, int layoutId, ViewGroup parent) { if (convertView == null ) { LayoutInflater inflater = LayoutInflater.from(context); convertView = inflater.inflate(layoutId, parent, false ); return new ViewHolder(context, convertView); } else { return (ViewHolder) convertView.getTag(); } } /** * findById方法 * @param id * @param <T> * @return */ public <T extends View> T findById( int id) { View view = views.get(id); if (view == null ) { view = convertView.findViewById(id); views.put(id, view); } else { view = views.get(id); } return (T) view; } /** * 设置TextView文本方法 * @param id * @param txt */ public void setText( int id, String txt) { TextView tv = findById(id); tv.setText(txt); } /** * 返回整个视图 * @return */ public View getItemView() { return convertView; } } } |
12345678910111213141516171819202122232425262728 | public class TestAdapter extends MyBaseAdapter{ private List<String> list; protected Context context; public TestAdapter(Context context, List<String> list) { super (context, list); this .list = list; this .context = context; } /** * 第二步 * @param position * @param convertView * @param parent * @return */ @Override public ViewHolder createViewHoler( int position, View convertView, ViewGroup parent) { ViewHolder holder = ViewHolder.getHolder(convertView,context, R.layout.simple_fragment,parent); //findById方法 TextView tv = holder.findById(R.id.tv_sp_fm); //设置TextView文本方法 holder.setText(R.id.tv_sp_fm,list.get(position)); return holder; } } |
相关文章推荐
- 完美实现Android ListView中的TextView的跑马灯效果
- android上改变listView的选中颜色
- PostgreSQL教程(三):表的继承和分区表详解
- Delphi7中Listview的常用功能汇总
- 插件管理框架 for Delphi(一)
- Delphi控件ListView的属性及使用方法详解
- Lua面向对象之类和继承浅析
- 浅析Ruby中继承和消息的相关知识
- 使用CSS框架布局的缺点和优点小结
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- android中ListView数据刷新时的同步方法
- Android提高之ListView实现自适应表格的方法
- Android中实现水平滑动(横向滑动)ListView示例
- 基于.NET平台常用的框架和开源程序整理
- C++实现不能被继承的类实例分析
- C# 面向对象三大特性:封装、继承、多态
- PHP类的封装与继承详解
- 列举PHP的Yii 2框架的开发优势
- C#实现ListView选中项向上或向下移动的方法
- Windows窗体的.Net框架绘图技术实现方法