您的位置:首页 > 移动开发 > Android开发

列表适配器

2016-04-20 23:15 423 查看
看了慕课网的视频,万能列表适配器。。其实就是把列表适配器的各种方法封装起来,然后对外公开方,让代码更加精简,并且不需要对每一个不同的列表都写一个适配器。

具体看了几遍没完全弄明白,先把代码记下来。直接可以用。

建立一个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());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android-列表