ListView适配器之增强版BaseAdapter
来源:互联网 发布:java redis auth 编辑:程序博客网 时间:2024/06/14 16:28
以往我们要写一个ListView的适配器的时候,我们往往要先继承BaseAdapter,然后在重写很多方法,然后再在**getView(int position, View view, ViewGroup viewGroup)** 函数里面,写我们的itemView的逻辑,其实无非就是三点:
- inflate 视图布局
- 绑定视图
绑定数据(也就是我们的视图的逻辑)
因此,这就是我下面要做的一些事情:把构造的关键步骤全部抽取成抽象函数,封装在父类当中,子类实现只需要在重写的方法里面实现就好了。
import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import java.util.List;/** * an Enhanced abstract BaseAdapter . * * Created by Tata on 15/7/7. */public abstract class AbstractBaseAdapter<T,V> extends BaseAdapter { private LayoutInflater mInflater; private List<T> mDatas; private Context mContext; public AbstractBaseAdapter(Context mContext) { this.mContext = mContext; mInflater = LayoutInflater.from(mContext); } @Override public int getCount() { return mDatas == null ? 0 : (mDatas.isEmpty() ? 0 : mDatas.size()); } @Override public T getItem(int i) { return mDatas == null ? null : mDatas.get(i); } @Override public long getItemId(int i) { return 0; } public void setData(List<T> data) { mDatas = data; notifyDataSetChanged(); } public void appendData(List<T> appendedData) { if (mDatas != null) mDatas.addAll(appendedData); notifyDataSetChanged(); } public void clearData() { mDatas.clear(); notifyDataSetChanged(); } @Override public View getView(int position, View view, ViewGroup viewGroup) { V viewHolder = null; if (view == null) { viewHolder = getViewHolder(); view = mInflater.inflate(getItemLayoutId(), null); onCreateItemView(position, viewHolder, view); view.setTag(viewHolder); } else { viewHolder = (V) view.getTag(); } onCreateItemData(view, viewHolder, position); return view; } /** * Retrieve the current item layou id. * * @return */ protected abstract int getItemLayoutId(); /** * Retrieve an instance of ViewHolder which was inherited from baseViewHolder * * @return */ protected abstract V getViewHolder(); /** * Called when the item view was first created. * * @param position * @param viewHolder * @param view */ protected abstract void onCreateItemView(int position, V viewHolder, View view); /** * Called when the item view was filled with data. * * @param view * @param viewHolder * @param position */ protected abstract void onCreateItemData(View view, V viewHolder, int position);}
下面是一个demo:
import android.content.Context;import android.view.View;import android.widget.ImageView;import android.widget.TextView;/** * Created by Tata on 15/7/7. */public class DemoAdapter extends AbstractBaseAdapter<DemoAdapter.Info, DemoAdapter.ViewHolder> { //the item layout resource id private int layoutid = 0x001; public DemoAdapter(Context mContext) { super(mContext); } @Override protected int getItemLayoutId() { return layoutid; } @Override protected ViewHolder getViewHolder() { return new ViewHolder(); } @Override protected void onCreateItemView(int position, ViewHolder viewHolder, View view) { viewHolder.icon = (ImageView) view.findViewById(000); viewHolder.name = (TextView) view.findViewById(0000); } @Override protected void onCreateItemData(View view, ViewHolder viewHolder, int position) { viewHolder.icon.setImageResource(0); viewHolder.name.setText("tata"); } static class ViewHolder { private TextView name; private ImageView icon; } /** * data-bean */ class Info { private String name; private int resId; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getResId() { return resId; } public void setResId(int resId) { this.resId = resId; } }}
0 0
- ListView适配器之增强版BaseAdapter
- listView适配器之BaseAdapter详解
- ListView (3) 之适配器 ArrayAdapter/SimpleAdapter/BaseAdapter
- BaseAdapter 作为 ListView 适配器
- ListView适配器BaseAdapter
- ListView 适配器BaseAdapter配置
- ListView适配器BaseAdapter
- 自定义ListView ,适配器(BaseAdapter)
- listview适配器Baseadapter
- 自定义ListView适配器继承BaseAdapter
- android listview的适配器------baseadapter
- ListView的优化 +BaseAdapter适配器
- Android适配器之BaseAdapter
- Android适配器之BaseAdapter
- Android适配器之BaseAdapter
- ListView之BaseAdapter
- ListView之BaseAdapter详解
- ListView之BaseAdapter
- 兔子c++
- 计算未旋转2矩形相交面积
- nodejs 内存泄漏
- Android NDK编程浅入深出之--域和方法的操作
- Maven 修改本地存储库位置
- ListView适配器之增强版BaseAdapter
- 子网掩码详解
- VS2008 32+win7 64+mysqlServer 64+mysql-connector-c-6.1.6-win32
- BAE使用git push出现错误:fatal: The remote end hung up unexpectedly
- Masonry介绍与使用实践:快速上手Autolayout
- Android-Universal-Image-Loader 图片异步加载类库的使用
- android开发笔记之mk文件
- Android View绘制流程
- [leetcode]Basic Calculator(java)