Android BaseAdapter与BaseExpandableListAdapter封装
来源:互联网 发布:淘宝网的域名怎么设置 编辑:程序博客网 时间:2024/06/11 03:11
在用ListView与ExpandableListView时,我们要用到BaseAdapter与BaseExpandableListAdapter来填充View。但继承这两个类,方法比较多。进行一下封装。
一、BaseAdapter的封装
1.ViewHolder类代码:
import android.content.Context;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;public class ViewHolder { private SparseArray<View> mViews; private View mConvertView; public static ViewHolder getHolder(Context mContext,View convertView, int layoutId){ if (convertView == null) { return new ViewHolder(mContext, layoutId); } return (ViewHolder) convertView.getTag(); } public ViewHolder(Context mContext, int layoutId) { this.mViews = new SparseArray<View>(); mConvertView = LayoutInflater.from(mContext).inflate(layoutId, null); mConvertView.setTag(this); } 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 getConvertView() { return mConvertView; }}
2.CommAdapter类继承BaseAdapter:
import java.util.ArrayList;import java.util.List;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;public abstract class CommAdapter<T> extends BaseAdapter { private Context mContext; //布局id private int layoutId; //数据 private List<T> mData = new ArrayList<T>(); public CommAdapter(Context context,int id,List<T> data) { mContext = context; layoutId = id; mData = data; } public void clearData(){ mData.clear(); notifyDataSetChanged(); } public void addData(List<T> data){ mData.addAll(data); notifyDataSetChanged(); } public void updateData(List<T> data){ mData.clear(); addData(data); } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = getViewHolder(convertView); itemView(mData.get(position), viewHolder,position); return viewHolder.getConvertView(); } private ViewHolder getViewHolder( View convertView) { return ViewHolder.getHolder(mContext, convertView, layoutId); } public abstract void itemView(T data,ViewHolder viewHolder,int postion);}
3.listView调用:
listView.setAdapter(new CommAdapter<String>(MainActivity.this,R.layout.list_item,data) { @Override public void itemView(String data, ViewHolder viewHolder, int postion) { //在此方法中获取viewHolder中的view,viewHolder.getView(viewId),设置view与相应的点击事件, } });
二、BaseExpandableListAdapter的封装
1.ExpandableAdapter类继承BaseExpandableListAdapter:
import java.util.ArrayList;import java.util.List;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseExpandableListAdapter;public abstract class ExpandableAdapter<X, Y> extends BaseExpandableListAdapter{ private Context mContext; private int groupLayoutId,itemLayoutId; private List<GoupData<X, Y>> mGroupData = new ArrayList<GoupData<X, Y>>(); public ExpandableAdapter(Context context,int gId,int iId,List<GoupData<X, Y>> gDatas) { this.mContext = context; this.groupLayoutId = gId; this.itemLayoutId = iId; this.mGroupData = gDatas; } @Override public int getGroupCount() { return mGroupData.size(); } @Override public int getChildrenCount(int groupPosition) { return mGroupData.get(groupPosition).getmChild() == null ? 0 : mGroupData.get(groupPosition).getmChild().size(); } @Override public Object getGroup(int groupPosition) { return mGroupData.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return mGroupData.get(groupPosition).getmChild().get(childPosition); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return mGroupData.get(groupPosition).getmChild().size(); } @Override public boolean hasStableIds() { return false; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { ViewHolder viewHolder = getViewHolder(convertView, groupLayoutId); groupView(groupPosition, isExpanded, viewHolder, (GoupData<X, Y>) getGroup(groupPosition)); return viewHolder.getConvertView(); } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ViewHolder viewHolder = getViewHolder(convertView, itemLayoutId); childView(groupPosition, childPosition,isLastChild, viewHolder,(Y) getChild(groupPosition, childPosition)); return viewHolder.getConvertView(); } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } private ViewHolder getViewHolder( View convertView,int layoutId) { return ViewHolder.getHolder(mContext, convertView, layoutId); } /**父view回调**/ public abstract void groupView(int groupPosition, boolean isExpanded,ViewHolder groupHolder,GoupData<X, Y> itemData); /**子view回调**/ public abstract void childView(int groupPosition, int childPosition,boolean isLastChild,ViewHolder childHolder,Y itemData);}
其中ViewHolder为上面的ViewHolder。
2.GoupData如下 :
import java.util.List;//使用泛型public class GoupData<X,Y> { //本身属性 private X x; //子列表 private List<Y> mChild; public X getX() { return x; } public void setX(X x) { this.x = x; } public List<Y> getmChild() { return mChild; } public void setmChild(List<Y> mChild) { this.mChild = mChild; }}
3.调用实现 :
expandableListView.setAdapter(new ExpandableAdapter<String,String>(this, R.layout.group_item, R.layout.child_item,gDatas){ @Override public void groupView(int groupPosition, boolean isExpanded, ViewHolder groupHolder, GoupData<String, String> itemData) { // 通过groupHolder获取view,设置父布局 } @Override public void childView(int groupPosition, int childPosition, boolean isLastChild, ViewHolder childHolder, String itemData) { // 通过childHolder获取view,设置子布局,childHolder.getView(viewId) } });
阅读全文
0 0
- Android BaseAdapter与BaseExpandableListAdapter封装
- BaseExpandableListAdapter封装
- BaseAdapter ArrayAdapter SimpleCursorAdapter SimpleAdapter BaseExpandableListAdapter
- Android BaseExpandableListAdapter
- Android BaseExpandableListAdapter
- Android BaseExpandableListAdapter
- Android 完美对BaseAdapter进行二次封装
- [android开发]封装BaseAdapter, 简便代码
- Android BaseAdapter的极简封装
- Android BaseExpandableListAdapter 例子
- Android BaseExpandableListAdapter 教程
- android ExpandableListView BaseExpandableListAdapter
- BaseExpandableListAdapter
- BaseExpandableListAdapter
- BaseExpandableListAdapter
- Android开发技巧——BaseAdapter的另一种优雅封装
- Android 对ListView和RecyclerView的两个BaseAdapter封装分享
- Android开发:BaseExpandableListAdapter的使用
- 相机标定部分官方代码
- 自定义View---header(标题栏)
- 设计模式讲解与代码实践(十一)——外观
- eclipse下的mybatis插件:MyBatipse
- Redux源码深度解析
- Android BaseAdapter与BaseExpandableListAdapter封装
- PHP+MySQL中文乱码
- 安卓智能地图开发与实施十九:符号与渲染器
- UVALive 3713 浅谈2-SAT问题图论求解法
- BZOJ 4241 历史研究 (回滚莫队)
- Android ViewPager用法解析
- JDBC高级编程和DAO
- spring学习之---深入理解容器中的Bean
- LCT例题·BZOJ2049洞穴勘测、BZOJ3669魔法森林