RecyclerView的其他应用

RecyclerView 的点击事件:

对于RecyclerView来说,该控件没有给我们提供内置监听方法,我们需要在adapter中增加点击事件,来达到recyclerView的点击。

第一步:声明一个接口,定义响应事件的方法。

public interface OnRVItemClickListener {
    //定义点击事件的回调
    void  onItemClick(int pos);
}
第二步:在RecyclerView的adapter内来维护(声明)一个接口对象

//声明一个监听器对象
private OnRVItemClickListener onRVItemClickListener;
//提供一个方法
public  void setOnRVItemClickListener(OnRVItemClickListener onRvItemClicList){
    this.onRVItemClickListener = onRvItemClicList;
第三步:在OnBindVIewHolder方法中对item设置点击事件监听,并对事件传递给接口对象。

//在这里给item添加响应事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //获取点击的位置
        int pos = holder.getLayoutPosition();
        //传递点击位置
        onRVItemClickListener.onItemClick(pos);
第四步:在MainActivity中实现接口,并重写方法,实现内容。

//给adapter添加监听器
adapter.setOnRVItemClickListener(this);
同时生成:

public void onItemClick(int pos) {
    Log.i("位置信息",pos+"");
}

RecyclerView 加载不同的Item:

第一步:导包

第二步:在main.xml中添加 recyclerView

第三步:创建xml布局,进行对每个item进行布局(需要几个创建几个)。

第四步:创建数据   

注意:在这写了个内部类,内部类里面有个构造方法(参数有数据还有数据的类型)

//创造数据
private void createData() {
    list= new ArrayList<>();
    MyData data1 = new MyData("hey man",R.drawable.c1,0);
    MyData data2 = new MyData("hey girl",R.drawable.c2,1);
    MyData data3 = new MyData("what's up?",R.drawable.c2,1);
    MyData data4 = new MyData("I want a stronger man",R.drawable.c1,0);
    list.add(data1);
    list.add(data2);
    list.add(data3);
    list.add(data4);


}

class MyData{

    String text;
    //标志消息的类型
    int type;
    int image;
    //构造函数
    public  MyData(String text,int image, int type){
        this.text = text;
        this.type = type;
        this.image= image;
第五步:创建adapter 继承自RecyclerView.Adapter    并创建viewHolder继承自RecyclerView.V iewHolder:


adapter里面有四个方法:

1.把item的xml布局注入到mainActivity中。并把他放到行对应的holder里。

public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    switch (viewType){
        case 0 :
            View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_0,null);
            MyViewHolder0 holder = new MyViewHolder0(view);
            return holder;
        case 1:
            View view1 = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_1,null);
            MyViewHolder1 holder1 = new MyViewHolder1(view1);
            return  holder1;

    }
    return null;
}
2.返回数据的类型(找到对应的viewholder)

public int getItemViewType(int position) {
    return list.get(position).type;
}
3.获取数据并把数据注入到viewholder里面

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    //获取数据得到类型
    MyData data = list.get(position);
    int type = data.type;
    switch (type){
        case 0:
            MyViewHolder0 holder0 = (MyViewHolder0) holder;
            holder0.textView.setText(data.text);
            holder0.imageView.setImageResource(data.image);

            break;
        case 1:
            MyViewHolder1 holder1 = (MyViewHolder1) holder;
            holder1.textView.setText(data.text);
            holder1.imageView.setImageResource(data.image);
            break;

    }
4.返回item的个数

public int getItemCount() {
    return list.size();
创建ViewHolder:

根据item的个数创建ViewHolder的个数:(用来加载每个item里面的控件)

class  MyViewHolder0 extends  RecyclerView.ViewHolder{
    TextView textView;
    ImageView imageView;

    public MyViewHolder0(View itemView) {
        super(itemView);
        textView = (TextView) itemView.findViewById(R.id.textView1);
        imageView = (ImageView) itemView.findViewById(R.id.image1);
    }
}

class  MyViewHolder1 extends RecyclerView.ViewHolder{
    TextView textView;
    ImageView imageView;

    public MyViewHolder1(View itemView) {
        super(itemView);
        textView = (TextView) itemView.findViewById(R.id.textView2);
        imageView = (ImageView) itemView.findViewById(R.id.image2);
    }






















































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值