RecyclerView(一)

初识RecyclerView

RecyclerView是android5.0之后推出的用于展示大量数据的空间,可以用来代替传统的ListView空间,功能强大且灵活。

首先我们需要在build.gradle(app)中添加依赖包:

dependencies {
      implementation 'com.android.support:recyclerview-v7:24.2.0'
}

以前使用的是compile编译,现在新版本已经替换成implementation。添加这一一条依赖之后,点击sync project with gradle file同步就可以了。(这条依赖包下面可能会出现红线,但是不影响使用)。

如何使用RecyclerView

recyclerView = findViewById(R.id.recycler_view);
//找到RecyclerView的布局文件
public void setLayoutManager(@Nullable LayoutManager layout);
//设置布局管理器
public void setAdapter(@Nullable Adapter adapter);
//设置Adapter
RecyclerView的布局文件

activity_recycler.xml

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

   <androidx.recyclerview.widget.RecyclerView
       android:id="@+id/recycler_view"
       android:layout_height="match_parent"    <!--布满整个屏幕-->
       android:layout_width="match_parent"
       android:background="#AAAAAA">

   </androidx.recyclerview.widget.RecyclerView>

</LinearLayout>
Adapter适配器

自己写的Adapter需要继承RecyclerView.Adapter;
标准实现步骤如下:
① 创建Adapter:创建一个继承RecyclerView.Adapter的Adapter类(VH是ViewHolder的类名)
② 创建ViewHolder:在Adapter中创建一个继承RecyclerView.ViewHolder的静态内部类,记为VH。ViewHolder的实现和ListView的ViewHolder实现几乎一样。
③ 在Adapter中实现3个方法:

onCreateViewHolder()
这个方法主要生成为每个Item inflater出一个View,但是该方法返回的是一个ViewHolder。该方法把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,当然这个ViewHolder需要我们自己去编写。

RecyclerAdapter.java

package cn.com.recyclerviewtest;

import android.content.ContentProvider;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
   // private TextView textView;
    private Context mContext;

    public RecyclerAdapter(Context context) {
        this.mContext = context;
    }
    @NonNull
    @Override
    //**生成每一个item inflate对象**
    public RecyclerAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
          return new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.reccycler_item, parent, false));
    }

    @Override
    //绑定内容
    public void onBindViewHolder(@NonNull RecyclerAdapter.MyViewHolder holder, final int position) {
        holder.textView.setText("Hello World!");
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            //点击事件
            public void onClick(View view) {
                Toast.makeText(mContext, "Click....." + position, Toast.LENGTH_SHORT ).show();
            }
        });
    }

    @Override
    //展示的item数, 一般是一个容器的大小
    public int getItemCount() {
        return 20;
    }

  // holder主要用于存储每一个item的内容,重写了这个方法,要修改前面的onCreate../onBlind...的内容参数
    public static class MyViewHolder extends RecyclerView.ViewHolder {
           private TextView textView;
           public MyViewHolder(View view) {
               super(view);         //view 每一个布局
               textView = view.findViewById(R.id.tv_recycler_item);
           }
    }
}

设置显示RecyclerView

RecyclerActivity

recyclerView = findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(RecyclerActivity.this));
        recyclerView.addItemDecoration(new MyDecoration());  //划分割线
        recyclerView.setAdapter(new RecyclerAdapter(RecyclerActivity.this));

class MyDecoration extends RecyclerView.ItemDecoration {
        @Override
        public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
            super.getItemOffsets(outRect, view, parent, state);
            outRect.set(0, 0, 0, getResources().getDimensionPixelSize(R.dimen.header_line));
        }

关于分割线的内容,可以参[andro recyclerViedIIw 简单实用二–分割线https://www.cnblogs.com/xuqp/p/9798704.html
学习资料推荐天哥在奔跑的android教学视频,在B站上可以找到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值