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

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中调用(调用没有完成)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值