ListView、Spinner、RecycleView的CommonAdapter
来源:互联网 发布:java培训知乎 编辑:程序博客网 时间:2024/06/05 19:16
参考网上,自己总结的项目中经常用到的adapter
ListView
package com.wiseljz.dy.common;import android.content.Context;import android.support.annotation.LayoutRes;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import java.util.List;/** * Created by l.wang(516066490@qq.com) on 2017/7/18. */public abstract class CommonAdapter<T> extends BaseAdapter{ protected List<T> data; protected Context context; public CommonAdapter(Context context) { this(context, null); } public CommonAdapter(Context context, List<T> data) { this.context = context; this.data = data; } @Override public int getCount() { return data == null ? 0 : data.size(); } @Override public T getItem(int position) { if(data == null || position<0 ||position>=data.size()) { return null; } return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = ViewHolder.get(context, convertView, parent, getItemLayoutRes(position), position); convert(holder, getItem(position)); return holder.convertView; } /** * 设置adapter item layout resource id * * @return */ public abstract @LayoutRes int getItemLayoutRes(int position); /** * 开发者实现该方法,进行业务处理 */ public abstract void convert(ViewHolder holder, T item); public List<T> getData() { return data; } public void setData(List<T> data) { this.data = data; } public static class ViewHolder { private View convertView; private SparseArray<View> views; private int position; public ViewHolder(Context context, ViewGroup parent, int layoutId, int position) { this.position = position; this.views = new SparseArray<View>(); convertView = LayoutInflater.from(context).inflate(layoutId, parent, false); convertView.setTag(this); } public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position) { if (convertView == null) { return new ViewHolder(context, parent, layoutId, position); } else { ViewHolder holder = (ViewHolder) convertView.getTag(); holder.position = position; return holder; } } public View findViewById(int id) { View v = views.get(id); if (v == null) { v = convertView.findViewById(id); views.put(id, v); } return v; } public View getConvertView() { return convertView; } public ViewHolder setText(int viewResId, String text) { TextView tv = (TextView) findViewById(viewResId); tv.setText(text); return this; } public int getPosition() { return position; } }}
使用:
mNavAdapter = new CommonAdapter<Node>(context) { @Override public int getItemLayoutRes(int position) { return R.layout.item_nav1; } @Override public void convert(ViewHolder holder, Node item) { holder.setText(R.id.tv, item.getCname()); } }; mNav.setAdapter(mNavAdapter);
Spinner
package com.wiseljz.dy.adapter;import android.content.Context;import android.content.res.Resources;import android.support.annotation.LayoutRes;import android.support.annotation.Nullable;import android.support.v7.widget.ThemedSpinnerAdapter;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.wiseljz.dy.common.CommonAdapter;import java.util.List;/** * Created by l.wang(516066490@qq.com) on 2017/7/18. */public abstract class SpinnerThemedAdapter<T> extends CommonAdapter<T> implements ThemedSpinnerAdapter{ private final ThemedSpinnerAdapter.Helper mDropDownHelper; public SpinnerThemedAdapter(Context context) { this(context, null); } public SpinnerThemedAdapter(Context context, List<T> data) { super(context, data); mDropDownHelper = new ThemedSpinnerAdapter.Helper(context); } @Override public void setDropDownViewTheme(@Nullable Resources.Theme theme) { mDropDownHelper.setDropDownViewTheme(theme); } @Nullable @Override public Resources.Theme getDropDownViewTheme() { return mDropDownHelper.getDropDownViewTheme(); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { ViewHolder holder = ViewHolder.get(context, convertView, parent, getDropDownItemLayoutRes(position), position); dropdownConvert(holder,getItem(position)); return holder.getConvertView(); } public abstract void dropdownConvert(ViewHolder holder, T item); public abstract @LayoutRes int getDropDownItemLayoutRes(int position);}
使用
mSalaryExpectAdapter = new SpinnerThemedAdapter<String>(context, Arrays.asList(getResources().getStringArray(R.array.salary_expect))) { @Override public void dropdownConvert(ViewHolder holder, String item) { holder.setText(R.id.tv, item); } @Override public int getDropDownItemLayoutRes(int position) { return R.layout.item_spinner_dropdown; } @Override public int getItemLayoutRes(int position) { return R.layout.item_spinner; } @Override public void convert(ViewHolder holder, String item) { holder.setText(R.id.tv, item); } }; mSpinnerSalaryExpect.setAdapter(mSalaryExpectAdapter);
RecycleView
package com.wiseljz.dy.common;import android.support.v7.widget.RecyclerView;import java.util.List;/** * Created by l.wang(516066490@qq.com) on 2017/7/18. */public abstract class CommonRVAdapter<T> extends RecyclerView.Adapter{ private List<T> data; public CommonRVAdapter() { } public CommonRVAdapter(List<T> data) { this.data = data; } @Override public int getItemCount() { return data == null ? 0 : data.size(); } public List<T> getData() { return data; } public void setData(List<T> data) { this.data = data; }}
使用
mSubNav.setLayoutManager(new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL)); mSubNavAdapter = new CommonRVAdapter<Node>() { @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(context).inflate(R.layout.item_subnav, parent, false); return new RecyclerView.ViewHolder(v) { }; } @Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { ImageView iv = (ImageView) holder.itemView.findViewById(R.id.iv); Utils.loadIntoUseFitWidth(context, ApiManager.IMG_HOST + getData().get(holder.getAdapterPosition()).getImg_url(), iv); iv.findViewById(R.id.iv).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPresenter.onSubNavClick(getData().get(holder.getAdapterPosition())); } }); } }; mSubNav.setAdapter(mSubNavAdapter);
阅读全文
0 0
- ListView、Spinner、RecycleView的CommonAdapter
- ListView的CommonAdapter
- listView的简化适配器commonAdapter
- CommonAdapter-万能的ListView.GridView的适配器
- ListView万能适配器CommonAdapter
- RecycleView替代ListView的使用方法
- Listview 和RecycleView的异同
- RecycleView 与 Listview 的差别
- ListView RecycleView的区别 详解
- Listview 和RecycleView的异同
- Listview 和RecycleView的异同
- CommonAdapter
- commonAdapter
- ListView中Spinner的使用
- 打造Listview的万能适配CommonAdapter(方便以后查找)
- Listview和RecycleView的简单比较
- listview和recycleview的刷新单个item
- recycleView简单实现listview的效果
- 文本转换工具类
- Jquery实现代码列表,包含全选删除图片的放大
- layer close 关闭层IE9-浏览器崩溃问题解决
- 数据库三范式,轻松理解
- Coursera机器学习 Week2 笔记
- ListView、Spinner、RecycleView的CommonAdapter
- 组合游戏
- 如何调整Oracle Redo Logfile日志文件的大小?
- MPEG2和MPEG4视频编码的比较
- 【读书笔记】Windows核心编程
- IPC跨进程通信学习计划(一)
- C语言中副作用和序列点(关于自增自减)
- caffe 解析 protobuf相关知识点
- Myeclipse中 Hibernate 映射的使用2