RecycleView使用和adapter基本封装
来源:互联网 发布:sql 删除默认值约束 编辑:程序博客网 时间:2024/04/29 05:57
一、RecycleView的使用
1、纵向列表
//泛型指定为MyAdapter的内部类class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{ List<String> list = new ArrayList<>(); public MyAdapter(List<String> list){ this.list = list; } //继承于RecyclerView.ViewHolder class ViewHolder extends RecyclerView.ViewHolder{ TextView textView; //构造中传入一个view的参数 ViewHolder(View view){ super(view); textView = (TextView) view.findViewById(R.id.textView2); } } //创建一个ViewHolder实例,将布局view传入其构造中 @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_recyler_item,parent,false); ViewHolder holder = new ViewHolder(view); return holder; } //子item的数量 @Override public int getItemCount() { return list.size(); } //对子item数据进行赋值 @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.textView.setText(list.get(position)); }}
recyclerView = (RecyclerView)findViewById(R.id.id_recycler); //用于指定RecyclerView的布局方式,这里指定线性布局 recyclerView.setLayoutManager(new LinearLayoutManager(this)); MyAdapter adapter = new MyAdapter(list); recyclerView.setAdapter(adapter);2、横向列表
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); recyclerView.setLayoutManager(linearLayoutManager);3、网格列表
GridLayoutManager gridLayoutManager = new GridLayoutManager(this,4);//第二个参数为列数 recyclerView.setLayoutManager(gridLayoutManager);4、瀑布流
//第一个参数为列数,第二个为排列方向 StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(manager);二、BaseAdapter
1、设置点击监听
/** * RecyclerView 点击条目的监听 */public interface OnItemClickListener<T> { void onItemClick(ViewGroup parent, View view,T t, int position);}2、继承于ViewHolder
public class ViewHolder extends RecyclerView.ViewHolder { private SparseArray<View> mViews; private Context mContext; private View mConverView; public ViewHolder(Context context, View itemView) { super(itemView); mContext=context; mConverView = itemView; mViews = new SparseArray<View>(); } //创建ViewHolder实例 public static ViewHolder get(Context context,ViewGroup parent,int layoutId){ View itemView = LayoutInflater.from(context).inflate(layoutId,parent,false); ViewHolder holder = new ViewHolder(context,itemView); return holder; } //获取组件 public <T extends View> T getView(int viewId){ View view = mViews.get(viewId); if (view==null){ view = mConverView.findViewById(viewId); mViews.put(viewId,view); } return (T)view; } //TextView设置文字 public ViewHolder setText(int viewId, String text){ TextView tv = getView(viewId); tv.setText(text); return this; } //TextView设置颜色 public ViewHolder setText(int viewId, int textColor){ TextView tv = getView(viewId); tv.setTextColor(textColor); return this; } //ImageView设置图片 public ViewHolder setImageResource(int viewId, int resId){ ImageView view = getView(viewId); view.setImageResource(resId); return this; } //ImageView设置图片 public ViewHolder setImageResource(int viewId, String imageUrl){ ImageView view = getView(viewId); //抽取出网络图片加载的工具类 BaseImageUtil.ImageLoader(mContext,imageUrl,view); return this; } //ImageView设置背景 public ViewHolder setBackgroundColor(int viewId, int color) { View view = getView(viewId); view.setBackgroundColor(color); return this; } //是否可见 public ViewHolder setVisible(int viewId, boolean visible) { View view = getView(viewId); view.setVisibility(visible ? View.VISIBLE : View.GONE); return this; } //item内控件点击事件 public ViewHolder setOnClickListener(int viewId, View.OnClickListener listener){ View view = getView(viewId); view.setOnClickListener(listener); return this; } //获取converview public View getConverView(){ return mConverView; }}3、BaseAdapter
public abstract class BaseAdapter<T> extends RecyclerView.Adapter<ViewHolder> { protected Context mContext; protected List<T> mDatas; //数据源 private int mLayoutId; protected OnItemClickListener mOnItemClickListener; //点击监听 public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.mOnItemClickListener = onItemClickListener; } public BaseAdapter(Context context , int layoutId){ mContext = context; mLayoutId = layoutId; } public BaseAdapter(Context context, int layoutId, List<T> datas){ mContext = context; mDatas = datas; mLayoutId = layoutId; } @Override public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) { final ViewHolder holder = ViewHolder.get(mContext,parent,mLayoutId); setClickListener(parent, holder); return holder; } //设置点击事件 protected void setClickListener(final ViewGroup parent, final ViewHolder holder) { //设置监听 holder.getConverView().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mOnItemClickListener!=null){ int position = holder.getAdapterPosition(); mOnItemClickListener.onItemClick(parent,v,mDatas.get(position),position); } } }); } @Override public void onBindViewHolder(ViewHolder holder, int position) { convert(holder,mDatas.get(position),position); } @Override public int getItemCount() { if (mDatas!=null&&mDatas.size()>0){ return mDatas.size(); } return 0; } /** * 必须要实现的查找控件和赋值的操作 * @param holder * @param t 数据 * @param position 索引 */ public abstract void convert(ViewHolder holder, T t, int position); //设置数据源 public void setData(List<T> datas){ mDatas = datas; } //清除所有数据 public void removeAll(){ if (mDatas!=null){ mDatas.clear(); } } //添加数据 public void addDatas(List<T> newDatas){ if (mDatas!=null){ mDatas.addAll(newDatas); } }}
0 0
- RecycleView使用和adapter基本封装
- RecycleView Adapter的封装
- Recycleview的adapter封装
- 使用RecycleView时候的adapter的简单封装
- RecycleView + SwipeRefreshLayout 对adapter和刷新的封装
- android RecycleView Adapter简单封装
- 仿RecycleView.Adapter封装BaseAdapter
- ReCycleView的 Adapter的封装
- 5.0 recycleview 和cardview基本使用
- RecycleView基本使用
- RecycleView及RecycleView Adapter
- 封装RecycleView的Adapter并实现列表展示
- RecyclerView.Adapter的基本封装
- android的RecycleView的基本使用和item间隔问题
- 封装Recycleview.Adapter使Recycleview具有加载更多,item点击事件等功能
- RecycleView的基本使用(一)
- android:RecycleView的简单封装使用
- 自己封装的工具类,使用原生SwipeRefreshLayout+RecycleView实现下拉刷新和加载更多
- mkdir创建目录
- css实现商城商品导航栏
- python 源码编译
- JSTL
- apache 的最大并发链接数
- RecycleView使用和adapter基本封装
- 产品经理之如何识别项目是否靠谱
- CUDA学习(归约算法)
- 框架
- python csv 格式文件 中文乱码问题解决方法
- 文件操作工具类和字符串判断是否为空
- android中横竖屏切换
- 网络流-最大流&最小费用最大流
- PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest0.6