Android应用开发之BaseAdapter基类的写法
2016-03-12 22:05
441 查看
/** * Created by Administrator on 2015/11/4. */ public class MyBaseAdapter<T> extends BaseAdapter { //其实无需设置context全局变量,getView方法中的parent.getContext()可以替代 public Context context; //数据集合中的元素类型为泛型 private List<T> datas; //以下两个方法分别封装了 覆盖数据/增加数据 的方法, //Adapter持有的数据外部不可见, //通过Adapter的成员方法来对数据进行操作,避免Activity代码凌乱。 public void setData(List<T> beans){ datas=beans; notifyDataSetChanged(); } public void addData(List<T> beans){ if (beans==null){ return; } if (datas==null){ setData(beans); } datas.addAll(beans); notifyDataSetChanged(); } public MyBaseAdapter(){ super(); } public MyBaseAdapter(Context context) { super(); this.context=context; } @Override public int getCount() { try {//避免空指针异常 return datas.size(); }catch (Exception e){ e.printStackTrace(); } return 0; } @Override public Object getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { context=parent.getContext(); return null; } }
有了上面这个 继承自BaseAdapter的 Adapter基类,在实际项目中 不同页面的ListView用到的不同Adapter 就可以直接继承这个MyBaseAdapter,并且指定好数据的类型,然后只需要重写getView方法就行了,再根据具体需要增加成员方法即可。十分方便,且封装性也很好。 以下就是 实际程序页面中用到的Adapter:
public class AlbumAdapter extends MyBaseAdapter<AlbumBean>{ @Override public View getView(final int position,View convertView,ViewGroup parent){ AlbumBean bean=(AlbumBean)getItem(position); ViewHolder holder; if(convertView==null){ convertView= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_album,parent,false); holder=new ViewHolder(convertView); convertView.setTag(holder); }else{ holder=(ViewHolder)convertView.getTag(); } holder.tv_title.setText(bean.getAlbumTitle()); holder.tv_detail.setText(bean.getAlbumContent()); return convertView; } private class ViewHolder { public ViewHolder(View convertView) { tv_title =(TextView)convertView.findViewById(R.id.tv_title); tv_detail =(TextView)convertView.findViewById(R.id.tv_detail); } TextView tv_title; TextView tv_detail; } }
可以看出,只需要重写getView()方法即可,十分方便。
然后再看看Activity中的使用:
先创建实例:
AlbumAdapter adapter=new AlbumAdapter ();
再与ListView关联:
listView.setAdapter(adapter);
然后网络访问成功的回调中,拿到数据并传入adapter中:
假设解析数据得到一个List< AlbumBean> datas,
adapter.setData(datas);
就这样在Activity中Adapter的使用显得十分简洁,清晰明了。
相关文章推荐
- ViewStub类延迟加载
- Android的各种零碎知识点(持续补充)
- 2015Android 开发新技术
- 关于android任务Task及回收栈back stack介绍
- android gradle plugin 1.3.0 以上使用 public.xml 固定 id
- Android中的模板方法模式
- Android开发qq一键登录成功返回数据的要方法
- Android开发之接收和发送短信
- Android不常见系统控件一览
- Android NDK开发第一蛋
- [android] 内容提供者简介
- Android开发学习之路--RxAndroid之lambda
- Android开发学习之路--RxAndroid之lambda
- Android实现自定义圆形/圆角ImageView
- Android的AlertDialog详解 自定义对话框
- Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
- 选取文字的聪明文字联想(Textselection与InputConnection)
- Android四大组件之服务(一)
- 对 android(安卓) 手机 数据抓包
- android中的Context(android内核学习记录)