`
喧嚣求静
  • 浏览: 573639 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

安卓通用baseAdapter数据适配器

 
阅读更多

用法

topFourFuncAdapter=new AbsCommonAdapter<TabOneFunMenuBean>(this,
				     R.layout.tabone_item_gridview,funcs){

						@Override
						public void convert(
								AbsCommonAdapter.ViewHolder helper,
								TabOneFunMenuBean item, int _selectedItem) {
							helper.setText(R.id.funName, item.getFunName());
							((ImageView)helper.getView(R.id.funIcon)).setImageResource(item.getResId());
						}
			
		};

 通用BaseAdapter

import java.util.Arrays;
import java.util.List;

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.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;


/**
 * @author 喧嚣求静,yinbiao
 * 万能通用适配器
 * */
public abstract class AbsCommonAdapter<T> extends BaseAdapter {

	protected Context mContext;
	protected List<T> mDatas;
	protected final int mItemLayoutId;
	protected int selectedItem=-1;

	public AbsCommonAdapter(Context context, int itemLayoutId, List<T> mDatas) {
		this.mContext = context;
		this.mDatas = mDatas;
		this.mItemLayoutId = itemLayoutId;
	}

	public AbsCommonAdapter(Context context, int itemLayoutId, T[] mDatas) {
		this.mContext = context;
		this.mDatas = Arrays.asList(mDatas);
		this.mItemLayoutId = itemLayoutId;
	}

	@Override
	public int getCount() {
		if (mDatas != null) {
			return mDatas.size();
		}
		return 0;
	}

	@Override
	public T getItem(int position) {
		return mDatas.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder viewHolder = getViewHolder(position, convertView, parent);
		viewHolder.setPosition(position);
		convert(viewHolder, getItem(position),selectedItem);
		return viewHolder.getConvertView();
	}

	private ViewHolder getViewHolder(int position, View convertView, ViewGroup parent) {
		return ViewHolder.get(mContext, convertView, parent, mItemLayoutId, position);
	}

	public abstract void convert(ViewHolder helper, final T item,final int _selectedItem);

	public void add(List<T> list) {
		if (list == null || list.size() == 0)
			return;
		this.mDatas.addAll(list);
		notifyDataSetChanged();
	}
	
	public void replace(List<T> list) {
		if (list == null || list.size() == 0)
			return;
		this.mDatas.clear();
		this.mDatas.addAll(list);
		notifyDataSetChanged();
	}

	public void add(T t) {
		this.mDatas.add(t);
		notifyDataSetChanged();
	}

	public void add(int position, T t) {
		this.mDatas.add(position, t);
		notifyDataSetChanged();
	}

	public void clearAll() {
		this.mDatas.clear();
		notifyDataSetChanged();
	}

	public void removeItem(T t) {
		this.mDatas.remove(t);
		notifyDataSetChanged();
	}

	public void removeItem(int position) {
		this.mDatas.remove(position);
		notifyDataSetChanged();
	}

	public List<T> getData() {
		return mDatas;
	}
	
	public void setSelectedItem(int selectedItem)
    {
        this.selectedItem = selectedItem;
    }



	/**
	 * 公共ViewHolder对象
	 * 
	 * @author 
	 * 
	 * @date 2015-6-9下午2:16:04
	 */
	public static class ViewHolder {
		private final SparseArray<View> mViews;
		private View mConvertView;
		private int position;

		public int getPosition() {
			return position;
		}

		public void setPosition(int position) {
			this.position = position;
		}

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

		/**
		 * 拿到一个ViewHolder对象
		 * 
		 * @param context
		 * @param convertView
		 * @param parent
		 * @param layoutId
		 * @param position
		 * @return
		 */
		public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position) {
			if (convertView == null) {
				return new ViewHolder(context, parent, layoutId, position);
			}
			return (ViewHolder) convertView.getTag();
		}

		public View getConvertView() {
			return mConvertView;
		}

		/**
		 * 通过控件的Id获取对于的控件,如果没有则加入views
		 * 
		 * @param viewId
		 * @return
		 */
		@SuppressWarnings("unchecked")
		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;
		}

		/**
		 * 为TextView设置字符串
		 * 
		 * @param viewId
		 * @param text
		 * @return
		 */
		public void setText(int viewId, String text) {
			TextView view = getView(viewId);
			view.setText(text);
		}

		/**
		 * 为ImageView设置图片
		 * 
		 * @param viewId
		 * @param drawableId
		 * @return
		 */
		public void setImageResource(int viewId, int drawableId) {
			ImageView view = getView(viewId);
			view.setImageResource(drawableId);
		}

		/**
		 * 为ImageView设置图片
		 * 
		 * @param viewId
		 * @param drawableId
		 * @return
		 */
		public void setImageBitmap(int viewId, Bitmap bm) {
			ImageView view = getView(viewId);
			view.setImageBitmap(bm);
		}
	}

}

 

0
0
分享到:
评论

相关推荐

    Android之自定义实现BaseAdapter(通用适配器三)

    Android之自定义实现BaseAdapter通用适配器三 Android之自定义实现BaseAdapter通用适配器第三篇是Android开发中一个非常重要的知识点,主要讲解了如何自定义实现BaseAdapter通用适配器。 BaseAdapter是Android中一...

    android打造listview通用适配器

    "android打造listview通用适配器"这个主题旨在解决这个问题,通过创建一个可复用的适配器模板,减少代码冗余,提高代码的可维护性和效率。 首先,我们要理解Adapter的作用。Adapter是ListView与数据源之间的桥梁,...

    Android之自定义实现BaseAdapter(通用适配器一)

    通过前面的优化布局之后,我们接着来讲如何打造一个通用的适配器,那么通用适配器能干吗呢?很简单,减少我们对代码的书写,下面开始上代码了。 MyAdapter.java public class MyAdapter extends BaseAdapter { ...

    android baseAdapter的简单封装demo

    3. 设置数据源,并在需要的时候调用`notifyDataSetChanged()`通知适配器数据已改变。 通过这种方式,我们可以快速为各种列表控件创建适配器,同时保持代码的清晰和模块化。对于初学者来说,理解并应用这种封装可以...

    android通用适配器开发

    在Android应用开发中,适配器(Adapter)是连接数据源和UI视图的关键组件,尤其是在处理列表或者网格展示时。通用适配器是为了提高代码的复用性和灵活性而设计的一种设计模式,它允许开发者创建一个可以适应多种数据...

    android之listview万能适配器

    "android之listview万能适配器"概念旨在创建一个通用、灵活的适配器,能够适应各种不同的数据结构和界面需求。以下将详细解析这个主题。 1. **适配器的作用**: - 适配器是`ListView`与数据模型之间的桥梁,它将...

    Android之自定义实现BaseAdapter(通用适配器二)

    在上一篇通用适配器一中,我们已经把ViewHolder抽取为了一个通用的持有类,极大程度上减少了我们对代码的书写,现在开始在那样的基础上在此抽取,从而达到更优。先回顾上一篇中的MyAdapter.java类中的代码,然后通过...

    安卓平台下通用适配器类设计与实现.pdf

    【Android 平台下的通用适配器类设计与实现】 在Android应用开发中,Adapter类起着至关重要的作用,它是数据与视图之间的桥梁,使得数据可以被适配并显示在ListView、GridView等组件上。Android系统遵循MVC(Model-...

    Android ListView 万能适配器

    "Android ListView 万能适配器"是解决ListView数据绑定的一种高效、灵活的方法,它能够适应多种类型的数据,使得开发者无需为每种不同的数据类型创建单独的Adapter。在本项目中,我们探讨的是一个名为"baseAdapter-...

    android通用适配器

    "Android通用适配器"是为了解决在不同场景下重复编写适配器代码的问题而设计的一种解决方案。这种适配器通常包含了一些常见的功能,如点击事件处理、数据绑定等,可以广泛应用于各种列表展示需求。 博客链接中提到...

    通用适配器(实体类+map)

    首先,通用适配器(Generic Adapter)是为了处理多种类型的数据对象而设计的,它通过继承自BaseAdapter并进行适当的定制,可以灵活地适应不同的数据模型。在标题中提到的"实体类+Map"方式,就是指适配器既可以处理...

    什么叫做万能适配器?BaseAdapter

    在Android开发中,"万能适配器"(Universal Adapter)通常是指一种可复用、灵活的适配器设计模式,用于将各种不同类型的数据显示在ListView、GridView等可滚动视图组件中。这个概念与BaseAdapter密切相关,...

    Android开发---适配器

    - **简介**:这个适配器是一个抽象类,它提供了一些通用的方法,例如通知数据改变等。 - **使用场景**:通常作为ListView的适配器。 6. **RecyclerView.Adapter** - **简介**:RecyclerView是Android新引入的一...

    通用ListView适配器

    通用适配器可能是基于BaseAdapter进行扩展的,因为BaseAdapter是最基础的适配器,提供了足够的灵活性,开发者可以自定义视图的创建和数据绑定逻辑。 关于"spinner"标签,Spinner是另一种常用的Android组件,它是一...

    android 万能适配器

    "Android 万能适配器"的概念旨在创建一个通用的、可复用的适配器模板,以简化开发过程并提高代码的可维护性。下面将详细介绍这个主题,以及如何构建和应用这种适配器。 1. **适配器的原理**: - Android中的适配器...

    Android 打造万能的ListView GridView 适配器

    5. **适配器扩展性**:设计一个通用的适配器,可以考虑使用泛型,让适配器可以处理任何继承自特定基类的数据对象。同时,提供一些钩子方法,让子类可以覆盖以实现特定的逻辑。 在给定的压缩包文件`zhy_...

    MonoAndroid:用C#编写自定义通用BaseAdapter

    BaseAdapter是Android中用于绑定数据到视图(如ListView)的一种基础类,而通用BaseAdapter则能帮助我们减少代码重复,提高代码复用性。 首先,我们需要理解ListView的工作原理。ListView是Android中的一个控件,它...

    android万能适配器

    - 在Android中,常见的适配器如ArrayAdapter、CursorAdapter和BaseAdapter,它们实现了ListView等控件的数据绑定。 2. **万能适配器的优势**: - 灵活性:它可以处理多种布局类型,比如单行文本、多行图文、...

Global site tag (gtag.js) - Google Analytics