ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 低调看直播体育app软件下载 >> Android开发 >> 编写自己的Adapter模板

编写自己的Adapter模板

来源:网络整理     时间:2015-03-06     关键词:

本篇文章主要介绍了"编写自己的Adapter模板",主要涉及到方面的内容,对于Android开发感兴趣的同学可以参考一下: 如果你项目一直用系统给你封装的BaseAdapter的话,那么我只想说,你不累么?代码繁多还要写数据缓存,还不如自己动手写一个模板吧,这样后面项目就可以直接套用...

如果你项目一直用系统给你封装的BaseAdapter的话,那么我只想说,你不累么?代码繁多还要写数据缓存,还不如自己动手写一个模板吧,这样后面项目就可以直接套用了,编写和执行效率大大提升啊。BaseAdapter.java
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import android.content.Context;
import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * 实现这个适配器模板会少很多代码
 * @author leehom
 * @param 
 */
public abstract class BaseAdapter extends android.widget.BaseAdapter {

	protected List list;
	protected Context context;
	protected LayoutInflater inflater;
	private int layoutID;

	public BaseAdapter(Context context, T[] ts, int layoutID) {
		super();
		this.context = context;
		this.list = new ArrayList();
		this.layoutID = layoutID;
		Collections.addAll(list, ts);
		this.inflater = LayoutInflater.from(context);
	}

	public BaseAdapter(Context context, List list, int layoutID) {
		super();
		this.layoutID = layoutID;
		this.context = context;
		this.list = new ArrayList();
		this.list.addAll(list);
		this.inflater = LayoutInflater.from(context);
	}

	public Resources getResources() {
		return context.getResources();
	}

	public synchronized void add(T object) {
		list.add(object);
	}

	public synchronized void addAll(Collection collection) {
		list.addAll(collection);
	}

	public synchronized void remove(T object) {
		list.remove(object);
	}

	public synchronized void insert(T object, int index) {
		list.add(index, object);
	}

	public synchronized void clear() {
		list.clear();
	}

	public synchronized void sort(Comparator comparator) {
		Collections.sort(list, comparator);
	}

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

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

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

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewHolder holder = null;
		if (convertView == null) {
			convertView = inflater.inflate(layoutID, null);
			holder = new ViewHolder(convertView);
			initView(holder);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}
		setViewValue(holder, position);
		return convertView;
	}

	public List getList() {
		return list;
	}

	/**
	 * 向ViewHolder类里面添加View
	 * @param holder
	 */
	public abstract void initView(ViewHolder holder);

	/**
	 * 从ViewHolder获取对应ID的View设置其值
	 * @param holder
	 * @param t 数据对象
	 */
	public abstract void setViewValue(ViewHolder holder, int position);

}
用的时候也是继承它,然后只需要初始化ID和设置Value就行了。例:
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;

import android.annotation.SuppressLint;
import android.content.Context;

import com.fenjin.app.humiture.R;
import com.fenjin.app.item.DefaultItem;

@SuppressLint("DefaultLocale")
public class DefaultAdapter extends BaseAdapter {

	public DefaultAdapter(Context context, Object object) {
		super(context, new ArrayList(),
				R.layout.default_list_item_layout);
		// TODO Auto-generated constructor stub
		try {
			Field[] fields = object.getClass().getDeclaredFields();
			for (Field field : fields) {
				String lable = field.getName();
				String firstWord = lable.substring(0, 1).toUpperCase();
				StringBuffer buffer = new StringBuffer("get");
				buffer.append(firstWord);
				buffer.append(lable.substring(1));
				String name = buffer.toString();
				Method method = object.getClass().getDeclaredMethod(name);
				String value = method.invoke(object).toString();
				DefaultItem item = new DefaultItem(lable, value);
				add(item);
			}
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void initView(ViewHolder holder) {
		// TODO Auto-generated method stub
		holder.addView(R.id.default_lable);
		holder.addView(R.id.default_value);
	}

	@Override
	public void setViewValue(ViewHolder holder, int position) {
		// TODO Auto-generated method stub
		DefaultItem item = getItem(position);
		holder.getTextView(R.id.default_lable).setText(item.getLable());
		holder.getTextView(R.id.default_value).setText(item.getValue());
	}

	@Override
	public boolean isEnabled(int position) {
		// TODO Auto-generated method stub
		return false;
	}

}

javabean代码

01publicclassDefaultItem {

02 

03    String lable;

04    String value;

05 

06    publicDefaultItem(String lable, String value) {

07        super();

08        this.lable = lable;

09        this.value = value;

10    }

11 

12    publicString getLable() {

13        returnlable;

14    }

15 

16    publicvoidsetLable(String lable) {

17        this.lable = lable;

18    }

19 

20    publicString getValue() {

21        returnvalue;

22    }

23 

24    publicvoidsetValue(String value) {

25        this.value = value;

26    }

27 

28}
xml代码

01xmlversion="1.0"encoding="utf-8"?>

02<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

03    android:layout_width="match_parent"

04    android:layout_height="match_parent"

05    android:orientation="horizontal"

06    android:padding="@dimen/margin_10">

07 

08    <TextView

09        android:id="@+id/default_lable"

10        android:layout_width="wrap_content"

11        android:layout_height="wrap_content"/>

12 

13    <TextView

14        android:layout_width="wrap_content"

15        android:layout_height="wrap_content"

16        android:text=":"/>

17 

18    <TextView

19        android:id="@+id/default_value"

20        android:layout_width="wrap_content"

21        android:layout_height="wrap_content"/>

22 

23LinearLayout>
每次实现的代码仅仅这么点

01@Override

02publicvoidinitView(ViewHolder holder) {

03    // TODO Auto-generated method stub

04    holder.addView(R.id.default_lable);

05    holder.addView(R.id.default_value);

06}

07 

08@Override

09publicvoidsetViewValue(ViewHolder holder, intposition) {

10    // TODO Auto-generated method stub

11    DefaultItem item = getItem(position);

12    holder.getTextView(R.id.default_lable).setText(item.getLable());

13    holder.getTextView(R.id.default_value).setText(item.getValue());

14}
是不是非常不错呢?

  • 本文固定链接: http://www.ithtw.com/1300.html
  • leehom 2015年03月06日 于 IT十万为什么 发表

以上就介绍了编写自己的Adapter模板,包括了方面的内容,希望对Android开发有兴趣的朋友有所帮助。

本文网址链接:http://www.codes51.com/article/detail_116480.html

相关图片

相关文章