RecyclerView控件的使用
来源:互联网 发布:b超数据看男孩女孩 编辑:程序博客网 时间:2024/04/18 23:50
Recyclerview已经推出很长时间了,近段时间工作不是很忙,就把以前所有项目的ListView都更新到 Recyclerview了,功能蛮强大的,具体的就不多说了,在这里就给大家分享下实际运用中的方法吧。
在build.gradle文件中添加依赖包(android studio开发工具)
compile 'com.android.support:recyclerview-v7:24.1.1'
main_layout布局文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.eric.recyclerviewdemo.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent"/></RelativeLayout>
item_layout布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="56dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/item_text" android:padding="10dp" android:textSize="18sp"/></LinearLayout>
MainActivity代码:
public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private DemoAdapter adapter; private List<String> mDatas; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //创建对象 recyclerView = (RecyclerView) findViewById(R.id.recycler_view); //准备数据 mDatas = new ArrayList<>(); for (int i = 0; i < 50; i++) { mDatas.add("RecyclerView item"+i); } LinearLayoutManager layoutManager = new LinearLayoutManager(this); //设置布局管理器 recyclerView.setLayoutManager(layoutManager); //设置垂直布局方式(系统默认也是垂直的) layoutManager.setOrientation(OrientationHelper.VERTICAL); //设置适配器adapter adapter = new DemoAdapter(this,mDatas); //设置分隔线 recyclerView.addItemDecoration( new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST)); recyclerView.setAdapter(adapter); }}
DemoAdapter代码:
public class DemoAdapter extends RecyclerView.Adapter { private Context context; private List<String> mData; public DemoAdapter(Context context, List<String> datas) { this.context = context; this.mData = datas; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_layout,parent,false); return new MyViewHolder(view); } private class MyViewHolder extends RecyclerView.ViewHolder { TextView tv; public MyViewHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.item_text); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { MyViewHolder myHolder = (MyViewHolder) holder; myHolder.tv.setText(mData.get(position)); } @Override public int getItemCount() { return mData.size(); }}
DividerItemDecoration代码:
public class DividerItemDecoration extends RecyclerView.ItemDecoration{ private static final int[] ATTRS = new int[]{ android.R.attr.listDivider }; public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; private Drawable mDivider; private int mOrientation; public DividerItemDecoration(Context context, int orientation){ final TypedArray a = context.obtainStyledAttributes(ATTRS); mDivider = a.getDrawable(0); a.recycle(); setOrientation(orientation); } private void setOrientation(int orientation) { if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST){ throw new IllegalArgumentException("invalid orientation"); } mOrientation = orientation; } @Override public void onDraw(Canvas c, RecyclerView parent) { if (mOrientation == VERTICAL_LIST){ drawVertical(c,parent); }else { drawHorizontal(c,parent); } } //垂直分割线 private void drawVertical(Canvas c, RecyclerView parent) { final int left = parent.getPaddingLeft(); final int right = parent.getWidth() - parent.getPaddingRight(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++){ final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); final int top = child.getBottom() + params.bottomMargin; final int bottom = top + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } //水平分割线 private void drawHorizontal(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } @Override public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { if (mOrientation == VERTICAL_LIST){ outRect.set(0,0,0,mDivider.getIntrinsicHeight()); }else { outRect.set(0,0,mDivider.getIntrinsicWidth(),0); } }}
运行效果:
给RecyclerView的Item添加点击事件,在DemoAdapter修改代码如下:
public class DemoAdapter extends RecyclerView.Adapter { private Context context; private List<String> mData; private OnItemCLickListener myItemCLickListener; //创建item点击事件的接口 public interface OnItemCLickListener{ void onClick(View view,int position); } //创建外部调用的回调方法 public void setItemCLickListener(OnItemCLickListener itemCLickListener) { this.myItemCLickListener = itemCLickListener; } public DemoAdapter(Context context, List<String> datas) { this.context = context; this.mData = datas; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_layout,parent,false); return new MyViewHolder(view); } class MyViewHolder extends RecyclerView.ViewHolder { TextView tv; public MyViewHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.item_text); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { myItemCLickListener.onClick(view,getPosition()); } }); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { MyViewHolder myHolder = (MyViewHolder) holder; myHolder.tv.setText(mData.get(position)); } @Override public int getItemCount() { return mData.size(); }}
MainActivity实现点击事件方法:
//实现点击事件 adapter.setItemCLickListener(new DemoAdapter.OnItemCLickListener() { @Override public void onClick(View view, int position) { Toast.makeText(MainActivity.this, "你点击了"+mDatas.get(position), Toast.LENGTH_SHORT).show(); } });
实现 item 点击选中变色的效果,在DemoAdapter增加以下代码:
public class DemoAdapter extends RecyclerView.Adapter { private Context context; private List<String> mData; private int selectPosition = -1; //选中的位置 private OnItemCLickListener myItemCLickListener; //创建item点击事件的接口 public interface OnItemCLickListener{ void onClick(View view,int position); } //创建外部调用的回调方法 public void setItemCLickListener(OnItemCLickListener itemCLickListener) { this.myItemCLickListener = itemCLickListener; } //定义一个setPosition的方法供Activity调用获取position的值 public void setSelectPosition(int selectPosition) { this.selectPosition = selectPosition; } public DemoAdapter(Context context, List<String> datas) { this.context = context; this.mData = datas; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_layout,parent,false); return new MyViewHolder(view); } class MyViewHolder extends RecyclerView.ViewHolder { TextView tv; public MyViewHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.item_text); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { myItemCLickListener.onClick(view,getPosition()); } }); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { MyViewHolder myHolder = (MyViewHolder) holder; myHolder.tv.setText(mData.get(position)); //判断当前点击的position并改变颜色 if (selectPosition == position){ vh.tv.setBackgroundColor(Color.RED); }else { vh.tv.setBackgroundColor(Color.TRANSPARENT); } } @Override public int getItemCount() { return mData.size(); }}
MainActivity增加实现方法:
//实现点击事件 adapter.setItemCLickListener(new DemoAdapter.OnItemCLickListener() { @Override public void onClick(View view, int position) { Toast.makeText(MainActivity.this, "你点击了"+mDatas.get(position), Toast.LENGTH_SHORT).show(); adapter.setSelectPosition(position); adapter.notifyDataSetChanged(); } });
运行效果就不贴出来了,小伙伴们自己去试试吧!!!喜欢的请支持我一下!( ̄▽ ̄*)
1 0
- RecyclerView控件的使用
- RecyclerView控件的使用
- 列表控件RecyclerView的使用
- android常用控件RecyclerView(三) RecyclerView的使用
- RecyclerView,SwipeRefreshLayout,CardView最新控件的使用
- [Android]关于RecyclerView控件的使用
- Android 高级编程 RecyclerView 控件的使用
- Android控件之RecyclerView的基本使用
- Android 控件 RecyclerView 的基本使用
- Android常用控件--RecyclerView的简单使用
- 使用Recyclerview控件遇到的一些问题
- Android RecyclerView控件的使用(一)
- RecyclerView 控件使用
- Android MaterialDesign控件使用以及RecyclerView,ItemDecoration的基本使用
- RecyclerView+RecyclerView.Adapter+RecyclerView.ViewHolder的使用
- 使用RecyclerView实现滚动控件
- SwipeRefreshView & RecyclerView 控件使用小结
- Android RecyclerView 使用完全解析 体验艺术般的控件
- 只有坚持还不够 为什么你的网站上不了百度首页
- centos搭建ftp服务
- android 屏幕保持不锁屏
- android service不被kill的方法
- myeclipse无法创建maven web项目:Could not resolve archetype
- RecyclerView控件的使用
- 链表的划分
- Android 吸入动画效果详解
- HDU-2955 Robberies(小数01背包)
- 导航的渐变设置
- Neural Networks and Deep Learning 学习笔记(十)
- ReentrantReadWriteLock详解
- iOS BLe
- Android程序构成和打包安装