调用公共方法ViewHolder和Adapter

第一中优化的方法

在Adapter中,以后ViewHolder就调用一下方法

package com.wwl.canvas.adapter;

import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ViewHolder {

	private SparseArray<View> mViews;
	private int mPositon;
	private View mConvertView;

	public ViewHolder(Context context, ViewGroup parent, int layoutId,
			int position) {
		this.mPositon = position;
		this.mViews = new SparseArray<View>();
		mConvertView = LayoutInflater.from(context).inflate(layoutId, parent,
				false);

		mConvertView.setTag(this);

	}

	public static ViewHolder get(Context context, View convertView,
			ViewGroup parent, int layoutid, int position) {
		if (convertView == null) {
			return new ViewHolder(context, parent, layoutid, position);
		} else {
			ViewHolder holder = (ViewHolder) convertView.getTag();
			holder.mPositon =position;
			return holder;
		}
	}
	
	/**
	 * 通过iewId获取控件
	 * @param viewId
	 * @return
	 */
	public <T extends View> T getView(int viewId){
		View view =mViews.get(viewId);
		if (view ==null) {
			view =mConvertView.findViewById(viewId);
			mViews.put(viewId, view);
		}
		return (T) view;
	}
	
	public View getmConvertView() {
		return mConvertView;
	}
}

 

 

然后Adapter继承CommAdapter<T>,如下方法

package com.wwl.canvas.adapter;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public abstract class CommonAdapter<T> extends BaseAdapter {

	protected Context mContext;
	protected List<T> mDatas;
	protected LayoutInflater inflater;
	
	public CommonAdapter(Context context,List<T> datas){
		this.mContext =context;
		this.mDatas =datas;
		inflater =LayoutInflater.from(context);
				
	}
	
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return mDatas.size()>0?mDatas.size():0;
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return mDatas.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public abstract View getView(int position, View convertView, ViewGroup parent);

}

 

 

最后查看Adapter中的操作方法:

 

 

public class MyAdapter extends CommonAdapter<Bean>{

	public MyAdapter(Context context,List<Bean> mDatas) {
		super(context, mDatas);
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		
		ViewHolder holder = ViewHolder.get(mContext, convertView, parent, R.layout.list_item, position);
		
		Bean bean = mDatas.get(position);
		
		((TextView)holder.getView(R.id.id_title)).setText(bean.getTitle());
		((TextView)holder.getView(R.id.id_desc)).setText(bean.getDesc());
		((TextView)holder.getView(R.id.id_time)).setText(bean.getTime());
		((TextView)holder.getView(R.id.id_phone)).setText(bean.getPhone());
		
		return holder.getmConvertView();
	}

}

 

 

第二种优化的方法(在第一种的基础上继续优化

 

ViewHolder类:

package com.wwl.canvas.adapter;

import com.nostra13.universalimageloader.core.ImageLoader;

import android.content.Context;
import android.graphics.Bitmap;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

public class ViewHolder {

	private SparseArray<View> mViews;
	private int mPositon;
	private View mConvertView;

	public ViewHolder(Context context, ViewGroup parent, int layoutId,
			int position) {
		this.mPositon = position;
		this.mViews = new SparseArray<View>();
		mConvertView = LayoutInflater.from(context).inflate(layoutId, parent,
				false);

		mConvertView.setTag(this);

	}

	public static ViewHolder get(Context context, View convertView,
			ViewGroup parent, int layoutid, int position) {
		if (convertView == null) {
			return new ViewHolder(context, parent, layoutid, position);
		} else {
			ViewHolder holder = (ViewHolder) convertView.getTag();
			holder.mPositon =position;
			return holder;
		}
	}
	
	
	
	public int getPositon() {
		return mPositon;
	}

	/**
	 * 通过iewId获取控件
	 * @param viewId
	 * @return
	 */
	public <T extends View> T getView(int viewId){
		View view =mViews.get(viewId);
		if (view ==null) {
			view =mConvertView.findViewById(viewId);
			mViews.put(viewId, view);
		}
		return (T) view;
	}
	
	public View getmConvertView() {
		return mConvertView;
	}
	
	/**
	 * 如果Adapter是TextView ,设置TextView的值
	 * @param viewId
	 * @param text
	 * @return
	 */
	public ViewHolder setText(int viewId,String text){
		TextView tv =getView(viewId);
		tv.setText(text);
		return this;
		
	}
	/**
	 * 如果Adapter是ImageView ,设置图片1111111
	 * @param viewId
	 * @param text
	 * @return
	 */
	public ViewHolder setImageResource(int viewId,int resId){
		ImageView view =getView(viewId);
		view.setImageResource(resId);
		return this;
		
	}
	/**
	 * 如果Adapter是ImageView ,设置图片22222
	 * @param viewId
	 * @param text
	 * @return
	 */
	public ViewHolder setImageBitmap(int viewId,Bitmap bitmap){
		ImageView view =getView(viewId);
		view.setImageBitmap(bitmap);
		return this;
		
	}
	/**
	 * 如果Adapter是ImageView ,设置图片33333
	 * @param viewId
	 * @param text
	 * @return
	 */
	public ViewHolder setImageURL(int viewId,String url){
		ImageView view =getView(viewId);
		ImageLoader.getInstance().displayImage(url,view);
		return this;
		
	}
}

 

 

CommAdapter类:

 

package com.wwl.canvas.adapter;

import java.util.List;

import com.wwl.canvas.R;
import com.wwl.canvas.view.Bean;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public abstract class CommonAdapter<T> extends BaseAdapter {

	protected Context mContext;
	protected List<T> mDatas;
	protected LayoutInflater inflater;
	protected int layoutId;
	
	public CommonAdapter(Context context,List<T> datas,int layoutId){
		this.mContext =context;
		this.mDatas =datas;
		this.layoutId =layoutId;
		inflater =LayoutInflater.from(context);
				
	}
	
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return mDatas.size()>0?mDatas.size():0;
	}

	@Override
	public T getItem(int position) {
		// TODO Auto-generated method stub
		return mDatas.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent){
		
		ViewHolder holder = ViewHolder.get(mContext, convertView, parent, layoutId, position);
		
		convert(holder, getItem(position));
		
		return holder.getmConvertView();
	};
	
	public abstract void convert(ViewHolder holder,T t);

}

 

 

MyAdapter类:

 

package com.wwl.canvas.adapter;

import java.util.List;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.wwl.canvas.R;
import com.wwl.canvas.view.Bean;

public class MyAdapter extends CommonAdapter<Bean> {

	public MyAdapter(Context context, List<Bean> mDatas) {
		super(context, mDatas,R.layout.list_item);
	}

	@Override
	public void convert(ViewHolder holder, Bean bean) {

		holder.setText(R.id.id_title, bean.getTitle())
				.setText(R.id.id_desc, bean.getDesc())
				.setText(R.id.id_time, bean.getTime())
				.setText(R.id.id_phone, bean.getPhone());

		// ((TextView)holder.getView(R.id.id_title)).setText(bean.getTitle());
		// ((TextView)holder.getView(R.id.id_desc)).setText(bean.getDesc());
		// ((TextView)holder.getView(R.id.id_time)).setText(bean.getTime());
		// ((TextView)holder.getView(R.id.id_phone)).setText(bean.getPhone());

	}

}

 

 

Bean类:

 

package com.wwl.canvas.view;

import java.io.Serializable;

public class Bean implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String title;
	private String desc;
	private String time;
	private String phone;
	
	private boolean isChecked;
	
	
	
	public boolean isChecked() {
		return isChecked;
	}
	public void setChecked(boolean isChecked) {
		this.isChecked = isChecked;
	}
	
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getDesc() {
		return desc;
	}
	public void setDesc(String desc) {
		this.desc = desc;
	}
	public String getTime() {
		return time;
	}
	public void setTime(String time) {
		this.time = time;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	
}

 

 

MainActivity类实现:

 

package com.wwl.canvas;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.ListView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.wwl.canvas.adapter.CommonAdapter;
import com.wwl.canvas.adapter.ViewHolder;
import com.wwl.canvas.view.Bean;

public class MainActivity extends Activity {
	
	DisplayImageOptions options;
	private ListView listview;
	private List<Bean> mDatas;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
//		mLuckyPan =new CanvasDemo(this);
//		setContentView(mLuckyPan);
		setContentView(R.layout.activity_main);
		
		options = new DisplayImageOptions.Builder()
		.showImageOnLoading(R.drawable.ic_launcher)
		.showImageForEmptyUri(R.drawable.ic_launcher)
		.showImageOnFail(R.drawable.ic_launcher).cacheInMemory(true)
		.cacheOnDisc(true).bitmapConfig(Bitmap.Config.RGB_565).build();
		
		
		listview =(ListView) findViewById(R.id.id_list);
		
		getDatas();
		
		listview.setAdapter(new CommonAdapter<Bean>(MainActivity.this,mDatas,R.layout.list_item) {
			private List<Integer> mPos = new ArrayList<Integer>();
			@Override
			public void convert(final ViewHolder holder, final Bean bean) {
				// TODO Auto-generated method stub
				holder.setText(R.id.id_title, bean.getTitle())
				.setText(R.id.id_desc, bean.getDesc())
				.setText(R.id.id_time, bean.getTime())
				.setText(R.id.id_phone, bean.getPhone());
				final CheckBox cb = holder.getView(R.id.id_cb);
				//第一种方法在bean中添加boolean类型的值,然后用cb.setChecked(bean.isChecked());以及点击的时候bean.setChecked(cb.isChecked());就可以了
//				cb.setChecked(bean.isChecked());
				//第二种方法:在adapter中获取mPosition的get方法。然后下面这个方法OK了
				cb.setChecked(false);
				
				if (mPos.contains(holder.getPositon())) {
					
					cb.setChecked(true);
				}
				cb.setOnClickListener(new OnClickListener() {
					
					@Override
					public void onClick(View arg0) {
//						bean.setChecked(cb.isChecked());
						
						if (cb.isChecked()) {
							
							mPos.add(holder.getPositon());
						}else{
							mPos.remove((Integer)holder.getPositon());
						}
						
					}
				});
			}
		});
		
	}
	private void getDatas() {
		mDatas = new ArrayList<Bean>(); 
		for (int i = 0; i < 15; i++) {
			Bean mBean =new Bean();
			
			mBean.setTitle("标题----"+(i+1));
			mBean.setDesc("正文----"+(i+1));
			mBean.setTime("时间----"+(i+1));
			mBean.setPhone("电话----"+(i+1));
			mDatas.add(mBean);
		}
	}


}

 

 

list_item布局:

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical" >
    <CheckBox android:id="@+id/id_cb" android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_centerInParent="true" android:layout_alignParentRight="true"/>
    <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical">
    <TextView android:id="@+id/id_title" android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:text="标题。。。。。。。。。。"/>
    <TextView android:id="@+id/id_desc" android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:text="正文"/>
    <TextView android:id="@+id/id_time" android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:text="时间。。。。。。。。。。"/>
    <TextView android:id="@+id/id_phone" android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:text="电话号码。。。。。。。。。。"/>
</LinearLayout>
</RelativeLayout>

 

你可能感兴趣的:(调用公共方法ViewHolder和Adapter)