列表适配器
2016-04-20 23:15
423 查看
看了慕课网的视频,万能列表适配器。。其实就是把列表适配器的各种方法封装起来,然后对外公开方,让代码更加精简,并且不需要对每一个不同的列表都写一个适配器。
具体看了几遍没完全弄明白,先把代码记下来。直接可以用。
建立一个Bean来存储数据,给数据加上get,set
要写一个ViewHolder的类
适配器的类,继承自BaseAdapter
然后写adapter继承CommonAdapter类
具体看了几遍没完全弄明白,先把代码记下来。直接可以用。
建立一个Bean来存储数据,给数据加上get,set
package bean; /** * Created by wang123456789pei on 2016/4/6. */ public class Bean { private String tv1; private String tv2; private String tv3; public Bean(){} public Bean(String tv1,String tv2,String tv3){ super(); this.tv1 = tv1; this.tv2 = tv2; this.tv3 = tv3; } public String getTv1() { return tv1; } public void setTv1(String tv1) { this.tv1 = tv1; } public String getTv2() { return tv2; } public void setTv2(String tv2) { this.tv2 = tv2; } public String getTv3() { return tv3; } public void setTv3(String tv3) { this.tv3 = tv3; } }
要写一个ViewHolder的类
package com.example.wang23333.mylistadapter; import android.content.Context; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; /** * Created by wang123456789pei on 2016/4/12. */ public class MyViewHolder{ private SparseArray<View> mViews; private int mPosition; private View mConventView; public MyViewHolder(Context context,ViewGroup parent,int LayoutId,int position){ this.mPosition = position; this.mViews = new SparseArray<View>(); mConventView = LayoutInflater.from(context).inflate(LayoutId,parent,false); mConventView.setTag(this); } public static MyViewHolder get(Context context,View convertView,ViewGroup parent,int LayoutId,int position ){ if ( convertView == null){ return new MyViewHolder(context,parent,LayoutId,position); } else{ MyViewHolder holder = (MyViewHolder)convertView.getTag(); holder.mPosition=position; return holder; } } /*通过viewid获取控件 */ public <T extends View> T getView(int viewId){ View view = mViews.get(viewId); if(view==null){ view=mConventView.findViewById(viewId); mViews.put(viewId,view); } return (T)view; } public View getmConventView() { return mConventView; } /*设置TextView的值*/ public MyViewHolder setText(int viewId,String text){ TextView tv = getView(viewId); tv.setText(text); return this; } /*设置ImageView图片,第二个参数为图片资源位置id*/ public MyViewHolder setImageView(int viewId,int ImageId){ ImageView iv = getView(viewId); iv.setImageResource(ImageId); return this; } /*后续可以继续添加针对各种控件的方法逐渐完善*/
适配器的类,继承自BaseAdapter
package com.example.wang23333.mylistadapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import java.util.List; /** * Created by wang123456789pei on 2016/4/12. */ public abstract class CommonAdapter<T> extends BaseAdapter { public LayoutInflater mInflater; public List<T> mbean; public Context mContext; public CommonAdapter(Context context,List<T> beans){ this.mContext = context; this.mbean = beans; mInflater = LayoutInflater.from(context); } @Override public int getCount() { return mbean.size(); } @Override public T getItem(int position) { return mbean.get(position); } @Override public long getItemId(int position) { return position; } public View getView(int position, View convertView ,ViewGroup parent,int LayoutId){ MyViewHolder holder =MyViewHolder .get(mContext,convertView,parent,LayoutId,position); convert(holder,getItem(position)); return holder.getmConventView(); } public void convert(MyViewHolder holder , T t){ } }
然后写adapter继承CommonAdapter类
package com.example.wang23333.listview_adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.List; import bean.Bean; /** * Created by wang123456789pei on 2016/4/6. */ public class New_Myadapter extends CommonAdapter<Bean> { public New_Myadapter(Context context, List<Bean> beans) { super(context, beans); } public void convert(MyViewHolder holder ,Bean bean){ /** * ((TextView)holder.getView(R.id.tv1)).setText(bean.getTv1()); * 这个写法就是如果在ViewHolder类里面没有针对某个控件写传入数据的方法 * 时的写法 */ holder.setText(R.id.tv1,bean.getTv1()) .setText(R.id.tv2,bean.getTv2()) .setText(R.id.tv3,bean.getTv3()); } }
相关文章推荐
- 我要开始写技术博客
- Learn Java for Android Development (第三版)---简介
- android:layout_gravity和android:gravity的使用区别
- android 之 Crash信息的持久化处理
- Android Studio开发入门-引用jar及so文件
- Android点9图的运用
- <Android HAL 之路> HAL 简介
- <Android HAL 之路> HAL 简介
- android中fragment卡顿的原因
- android中listview滑动卡顿的原因
- android黑白屏的问题
- android启动时间慢的问题
- 如何实现android和服务器长连接
- 浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解
- Android Fragment生命周期
- Android Studio快捷键
- android onTouch()与onTouchEvent()的区别
- Android Small插件化框架解读——Activity注册和生命周期[阿里工程师分享]
- Android复习
- Android API之android.net.wifi.WifiConfiguration