6.RecyclerView的使用(包括分割线的设置,item点击事件的监听,以及recyclorview中数据的改变)

来源:互联网 发布:剑网三光头捏脸数据 编辑:程序博客网 时间:2024/06/06 07:04

1.在build中编写recyclerView的dependence依赖

2.在相应的布局中编写recyclorView的控件

3.在Activity中实例化recyclorView

4.编写adapter中item的布局

5.编写adapter继承自RecyclorView的adapter

6.在Activity中实例化adapter,并且调用


代码;

1.

dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    testCompile 'junit:junit:4.12'    compile 'com.android.support:appcompat-v7:23.2.0'    compile "com.android.support:recyclerview-v7:23.0.1"}//compile "com.android.support:recyclerview-v7:23.0.1"是对recyclerview的依赖

2.

<android.support.v7.widget.RecyclerView    android:id="@+id/recycler_view"    android:layout_width="match_parent"    android:layout_height="wrap_content"    ></android.support.v7.widget.RecyclerView>

3.在Activity中实例化receyclorView,并且实例化配置adapter

private List<String> list=new ArrayList<>();
private void initRecyclerView(View view) {    recyclerView= (RecyclerView) view.findViewById(R.id.recycler_view);    initList();    homeCategoryAdapter=new HomeCategoryAdapter(list);   //加载adapter    recyclerView.setAdapter(homeCategoryAdapter);   //必须写才能出现recyclorView    recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));}private void initList(){    list.add("one");    list.add("one");    list.add("one");    list.add("one");    list.add("one");    list.add("one");}

4.item布局

<?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="match_parent">    <TextView        android:id="@+id/item_text_view"        android:layout_width="match_parent"        android:layout_height="80sp"        /></LinearLayout>

5.adapter适配器的实现步骤:
1.创建HomeCategoryAdapter继承自RecyclerView.Adapter,并且要写它的泛型

2.写内部类ViewHolder extends RecyclerView.ViewHolder,实现他的方法

3.实现HomeCategoryAdapter的方法

4.编写HomeCategoryAdapter的构造函数

5.先实例化布局,然后实例化控件,然后绑定数据

package zuo.com.ui.adapter;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;import zuo.com.ui.R;/** * Created by Administrator on 2016/10/8. */public class HomeCategoryAdapter extends RecyclerView.Adapter<HomeCategoryAdapter.ViewHolder> {    private List<String> list;    private LayoutInflater layoutInflater;    public HomeCategoryAdapter(List<String> list){        this.list=list;    }   //绑定item布局文件,然后在内部类ViewHolder中绑定item布局文件中的子控件    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        layoutInflater=LayoutInflater.from(parent.getContext());        View view=layoutInflater.inflate(R.layout.item_homeadapter,parent,false);        return new ViewHolder(view);    }    //绑定数据,即绑定子空间中的数据    @Override    public void onBindViewHolder(ViewHolder holder, int position) {        holder.textView.setText(list.get(position));    }   //返回数据的大小    @Override    public int getItemCount() {        return list.size();    }// 绑定item布局文件中的子控件    class ViewHolder extends RecyclerView.ViewHolder{    private TextView textView;        public ViewHolder(View itemView) {            super(itemView);            textView= (TextView) itemView.findViewById(R.id.item_text_view);        }    }}

6.调用adapter

//必须写才能出现recyclorView
 recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));

private void initRecyclerView(View view) {    recyclerView= (RecyclerView) view.findViewById(R.id.recycler_view);    initList();    homeCategoryAdapter=new HomeCategoryAdapter(list);   //加载adapter    recyclerView.setAdapter(homeCategoryAdapter);   //必须写才能出现recyclorView,可以写成GirdLayout()这样recyclerview就会显示不同的形式    recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));}private void initList(){    list.add("one");    list.add("one");    list.add("one");    list.add("one");    list.add("one");    list.add("one");}



二、分割线的设置渲染:receclorview的分割线和listview不同,可以自定义渲染效果,但是需要创建一个类HomeItemDecoration继承自RececlorView.RecyclerView.ItemDecoration 

1.HomeItemDecoration代码:

package zuo.com.ui.decoration;import android.graphics.Canvas;import android.graphics.Rect;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;/**用于渲染recyclorView分割线 * Created by Administrator on 2016/10/9. */public class HomeItemDecoration extends RecyclerView.ItemDecoration {    //渲染item之前调用的方法    @Override    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {        super.onDraw(c, parent, state);    }    //渲染完之后调用的方法    @Override    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {        super.onDrawOver(c, parent, state);    }    //s设置item的边距    @Override    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {        super.getItemOffsets(outRect, view, parent, state);        int layoutOrientation = getOrientation(parent);        if (layoutOrientation == LinearLayoutManager.VERTICAL) {            outRect.top = 10;            outRect.left=5;            outRect.right=5;        } else if(layoutOrientation == LinearLayoutManager.HORIZONTAL) {            outRect.left = 5;        }    }    private int getOrientation(RecyclerView parent) {        if (parent.getLayoutManager() instanceof LinearLayoutManager) {            LinearLayoutManager layoutManager = (LinearLayoutManager) parent.getLayoutManager();            return layoutManager.getOrientation();        } else throw new IllegalStateException("DividerItemDecoration can only be used with a LinearLayoutManager.");    }}

2.调用分割线:

private void initRecyclerView(View view) {    recyclerView= (RecyclerView) view.findViewById(R.id.recycler_view);    initList();    homeCategoryAdapter=new HomeCategoryAdapter(list);   //加载adapter    recyclerView.setAdapter(homeCategoryAdapter);   //必须写才能出现recyclorView,也可以是GirdLayoutManager,只是显示item的图形不一样    recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));    //设置分割线    recyclerView.addItemDecoration(new HomeItemDecoration());}


三、item点击事件的监听,在adapter中编写OnClickListener()

1.首先在adapter中定义一个监听器interface  OnItemClickListener{},定义一个方法OnClick(View v,int position,String city)

2.在adapter中创建接口的对象,然后创建一个方法为构造函数setOnItemClickListene()

3.在Viewholder中绑定监听事件,如果对button 绑定点击事件

button.setOnclickListener()

4.最后在Activity中,调用自定义的监听事件,调用方法为setOnItemClickListene()


代码:

1.

//创建recyclorview的监听事件   public interface OnItemClickListener{        void onClick(View v,int position,String city);    }


2.

public OnItemClickListener listener;              //创建item监听器对象public  void setOnItemClickListener(OnItemClickListener listener){            //创建构造函数    this.listener=listener;}

3.

// 绑定item布局文件中的子控件    class ViewHolder extends RecyclerView.ViewHolder{    private TextView textView;        public ViewHolder(View itemView) {            super(itemView);            textView= (TextView) itemView.findViewById(R.id.item_text_view);            //绑定item的点击事件            itemView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    if(listener!=null){                        listener.onClick(v,getLayoutPosition(),list.get(getLayoutPosition()));                    }                }            });        }    }

4.

private void initRecyclerView(View view) {    recyclerView= (RecyclerView) view.findViewById(R.id.recycler_view);    initList();    homeCategoryAdapter=new HomeCategoryAdapter(list);    //加载adapter    recyclerView.setAdapter(homeCategoryAdapter);    //必须写才能出现recyclorView,也可以是GirdLayoutManager,只是显示item的图形不一样    recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));    //设置分割线    recyclerView.addItemDecoration(new HomeItemDecoration());
        //item的监听事件    homeCategoryAdapter.setOnItemClickListener(new HomeCategoryAdapter.OnItemClickListener() {        @Override        public void onClick(View v, int position, String city) {            Toast.makeText(getContext(),"点击成功",Toast.LENGTH_SHORT).show();        }    });}



三、recyclorView中数据的改变

1.在adapter中编写增加数据和减少数据的函数

2.然后在调用设置adapter的class中调用(调用没有完成)

0 0
原创粉丝点击