ListView多布局Adapter封装
来源:互联网 发布:数据库的测试方法 编辑:程序博客网 时间:2024/05/20 18:01
出现需求
多布局的话使用RecyclerView更为合理,但是目前项目使用的是eclipse,普遍使用的是ListView,若为一个界面而引入RecyclerView不划算不合理。所以将Adapter简单修改后让ListView具备多布局能力。
分装Adapter
public abstract class AbsListAdapter<T> extends BaseAdapter { protected Context mContextInAbsAdapter; List<T> mDataList; public AbsListAdapter(Context mContext) { super(); this.mContextInAbsAdapter = mContext; this.mDataList = new ArrayList<T>(); } public void setData(@NonNull List<T> tempDatas) { this.mDataList.clear(); this.addDatas(tempDatas); } public void addDatas(@NonNull List<T> tempDatas) { this.mDataList.addAll(tempDatas); this.notifyDataSetChanged(); } public void addData(@NonNull T data) { this.mDataList.add(data); this.notifyDataSetChanged(); } public void addData(int index, @NonNull T data) { this.mDataList.add(index, data); this.notifyDataSetChanged(); } public void removeData(int index){ if (index != ParamUtil.checkInt(index, 0, this.mDataList.size())) { return ; } this.mDataList.remove(index); this.notifyDataSetChanged(); } public void removeData(T t){ if (t == null) { return; } int index = this.mDataList.indexOf(t); removeData(index); } public void clearData() { this.mDataList.clear(); this.notifyDataSetChanged(); } public List<T> getDatas() { return new ArrayList<T>(this.mDataList); } @Nullable public T getData(int index) { if (index != ParamUtil.checkInt(index, 0, this.mDataList.size())) { return null; } return this.mDataList.get(index); } @SuppressLint("ViewTag") @Override public View getView(int position, View convertView, ViewGroup parent) { T data = null; // getCount() 可能被覆写 if (position < this.mDataList.size()) { data = this.mDataList.get(position); } int itemLayoutResId = getItemLayoutResId(position, data); if (convertView != null && (Integer) convertView.getTag() != itemLayoutResId) { convertView.setTag(((Integer) convertView.getTag()), null); convertView = null; } ViewHolder holder = null; if (convertView != null) { holder = (ViewHolder) convertView.getTag(itemLayoutResId); } if (holder == null) { convertView = LayoutInflater.from(mContextInAbsAdapter).inflate(itemLayoutResId, parent, false); holder = new ViewHolder(convertView); convertView.setTag(itemLayoutResId); convertView.setTag(itemLayoutResId, holder); } onBindData(position, data, holder); return convertView; } @Override public long getItemId(int position) { return position; } @Override public int getCount() { return mDataList.size(); } @Override public Object getItem(int position) { return null; } public abstract int getItemLayoutResId(int position, T data); public abstract void onBindData(int position, T data, ViewHolder holder); public static class ViewHolder { private SparseArray<View> viewCache; private View itemView; public ViewHolder(View containerView) { this.itemView = containerView; this.viewCache = new SparseArray<View>(); } @SuppressWarnings("unchecked") public <T extends View> T getView(int resId) { View view = this.viewCache.get(resId); if (view == null) { view = this.itemView.findViewById(resId); this.viewCache.put(resId, view); } return (T) view; } public View getConvertView() { return this.itemView; } public void setText(int resId, CharSequence text) { TextView textView = this.getView(resId); textView.setText(text); } }}
使用例子
private class MyAdapter extends AbsListMultiAdapter<String>{ public MyAdapter(Context mContext) { super(mContext); } @Override public int getItemLayoutResId(int position, String data) { // 可以根据position或data判断 return position % 2 == 0 ? R.layout.item_voice_assistant : R.layout.v_textview; } @Override public void onBindData(int position, String data, com.elife.mobile.base.AbsListAdapter3.ViewHolder holder) { // TODO Auto-generated method stub holder.setText(R.id.tv_textView, data); } }
完整代码在github,里面还有更多功能哦
阅读全文
0 0
- ListView多布局Adapter封装
- ListView 通用Adapter封装
- Android---封装ListView的Adapter
- Adapter类型控件之ListView Item多布局的实现
- Android ListView,GridView的Adapter封装
- ListView Adapter 封装 打造Android 万能适配器
- ListView和RecyclerView的Adapter封装
- 封装一个通用的 listview/gridview Adapter
- ListView中adapter的简单封装
- adapter实现多布局
- Android-对ListView的Adapter的一种简单封装
- 多布局的自定义Adapter
- ListView Adapter适配器的布局实例及相关问题
- Android ListView Adapter的getItemViewType和getViewTypeCount多种布局
- Android ListView Adapter的getItemViewType和getViewTypeCount多种布局
- android 实现listview的adapter多种布局方式
- 布局与控件(九)-ListView的Adapter们
- Android listview加载不同布局与adapter用法
- java file的简单介绍
- SQL语句判断
- 线性表链式存储结构
- 结构体,共用体,枚举类型
- Android7.0中文文档(API)--- AdapterView
- ListView多布局Adapter封装
- WAMP启动报错MSVCR100.dll丢失
- python第十篇之-全局变量
- 使用Eclipse、MyEclipse反编译.class文件
- Twisted入门教程(5)
- Krpano学习:krpano调用javascript方法并传参、在krpano中用javascript实现视频音频播放
- [bzoj4472][Jsoi2015]salesman 树形DP
- 全排列,素数,兔子繁殖
- C#二进制与字符串之间的相互转换