RecyclerView的不完全使用攻略+点击单选(未完)
2017-02-13 08:25
561 查看
1.首先在主布局文件中引入recycleview控件,使用recycleview前必须先在文档目录结构中引入v7包中的recycleview。
2.在主布局文件中引入recycleview控件。
main_activity
3.编写recycleview的子布局文件。
recycleview_item.xml
4.编写recycleview的适配器(重难点)一步一步代码如下,详细代码在最后
第一步、创建自定义适配器类MyAdapter,并继承recycleview.adapter。而且泛型指定为稍后创建自定义适配器类中的viewholder。
第二步、创建自定义适配器类MyAdapter中的自定义ViewHolder类。
第三步、声明数据源和转换子布局布局转换器
第四步、提供自定义适配器类的构造器
第五步、重写RecyclerView.Adapter的三个方法(onCreateViewHolder()、onBindViewHolder()、getItemCount())。
至此,recycleview的自定义适配器就完成了,以下是详细代码。
1.RecyclerView添加下划线的方法,重写addItemDecoration,new一个RecyclerView.ItemDecoration对象,重写这个对象中的三个方法,其中一个是修改分割线的颜色,第三个是修改每个Item的前后左右的间距。
2.在主布局文件中引入recycleview控件。
main_activity
<?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:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.zdsoft.testrecyclerview.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="wrap_content"/> </RelativeLayout>
3.编写recycleview的子布局文件。
recycleview_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/tv" android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:gravity="center" android:textSize="40sp"/> <TextView android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" android:textColor="@android:color/holo_green_light" android:textSize="40sp" android:text="√"/> </LinearLayout>
4.编写recycleview的适配器(重难点)一步一步代码如下,详细代码在最后
第一步、创建自定义适配器类MyAdapter,并继承recycleview.adapter。而且泛型指定为稍后创建自定义适配器类中的viewholder。
//类名完整写法 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { }
第二步、创建自定义适配器类MyAdapter中的自定义ViewHolder类。
class MyViewHolder extends RecyclerView.ViewHolder { //声明控件 TextView tv,tv1 ; //先定义着,这是子布局文件,会在其他代码中用inflator转换出来 View itemView ; //提供构造器 public MyViewHolder(View itemView) { super(itemView); //在转换过之后的子布局文件中实例化控件 tv = (TextView) itemView.findViewById(R.id.tv); tv1 = (TextView) itemView.findViewById(R.id.tv1); this.itemView = itemView ; } }
第三步、声明数据源和转换子布局布局转换器
//声明变量 //数据源 ArrayList<String> datas ; //布局转化器 LayoutInflater inflater ;
第四步、提供自定义适配器类的构造器
//提供构造器,传入的是数据源和,上下文对象,因为布局转换器需要上下文对象才能使用。 public MyAdapter(ArrayList<String> datas, Context context) { this.datas = datas ; inflater = LayoutInflater.from(context); }
第五步、重写RecyclerView.Adapter的三个方法(onCreateViewHolder()、onBindViewHolder()、getItemCount())。
//重写onCreateViewHolder()方法,当创建ViewHolder,加载itemView时被调用 @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //加载ItemView View itemView = inflater.inflate(R.layout.recyclerview_item,null); //创建ViewHolder对象 MyViewHolder holder = new MyViewHolder(itemView); //返回holder return holder; }
//重写onBindViewHolder()方法,当展示数据时被调用,将指定位置的数据展示到指定的itemView上。 @Override public void onBindViewHolder(MyViewHolder holder, final int position) { //获得指定的数据 String data = datas.get(position); holder.tv.setText(data); } }
//重写getItemCount()方法,获得数据源的总数 @Override public int getItemCount() { return datas == null ? 0 : datas.size(); }
至此,recycleview的自定义适配器就完成了,以下是详细代码。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { //声明变量 //数据源 ArrayList<String> datas ; //布局转化器 LayoutInflater inflater ; //2.将接口声明为全局变量 OnItemClickListener onItemClickListener ; //提供构造器 public MyAdapter(ArrayList<String> datas, Context context) { this.datas = datas ; inflater = LayoutInflater.from(context); } //当创建ViewHolder,加载itemView时被调用 @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //加载ItemView View itemView = inflater.inflate(R.layout.recyclerview_item,null); //创建ViewHolder对象 MyViewHolder holder = new MyViewHolder(itemView); //返回holder return holder; } //当展示数据时被调用 //将指定位置的数据展示到指定的itemView上 @Override public void onBindViewHolder(MyViewHolder holder, final int position) { //获得指定的数据 String data = datas.get(position); holder.tv.setText(data); } //获得数据源的总数 @Override public int getItemCount() { return datas == null ? 0 : datas.size(); } class MyViewHolder extends RecyclerView.ViewHolder { //声明控件 TextView tv,tv1 ; View itemView ; public MyViewHolder(View itemView) { super(itemView); //实例化控件 tv = (TextView) itemView.findViewById(R.id.tv); tv1 = (TextView) itemView.findViewById(R.id.tv1); this.itemView = itemView ; } } }
1.RecyclerView添加下划线的方法,重写addItemDecoration,new一个RecyclerView.ItemDecoration对象,重写这个对象中的三个方法,其中一个是修改分割线的颜色,第三个是修改每个Item的前后左右的间距。
recycler.addItemDecoration(new RecyclerView.ItemDecoration){ //修改分割线的颜色 @Override public void onDraw(Canvas c,RecylerView parent,RecyclerView.State state){ super.onDraw(c,parent,state); c.drawColor(Color.BLACK) } @Override public void onDrawOver(Canvas c,RecylerView parent,RecyclerView.State state){ super.onDraw(c,parent,state); //修改各个item的间隔 @Override public void getItemOffsets(Rect outRect,View view,RecyclerView paret,RecyclerView.State state){ super.getItemOffsets(outRect,view,parent,state); outRect.set(1,5,1,5); } });
相关文章推荐
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- android RecyclerView 使用完全解析 替代ListView(一)
- 【FastDev4Android框架开发】CardView完全解析与RecyclerView结合使用(三十二)
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android V7 RecyclerView 使用完全解析
- Android RecyclerView 使用完全解析
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件
- android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理
- Android RecyclerView 使用完全解析
- android RecyclerView 使用完全解析
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android RecyclerView 使用完全解析 体验艺术般的控件