Android的RecyclerView使用介绍

这篇博客介绍了如何在Android应用中使用RecyclerView,包括在Gradle中配置依赖、XML布局文件中添加RecyclerView、创建适配器及ViewHolder,以及在MainActivity中初始化和显示RecyclerView的步骤,适合Android开发初学者。

    最近想写一个Android的阅读器,发现需要用到RecyclerView,这种界面就是大家经常用到的在App中不断往下滑动时所用的界面(替代ListView),看了一下相关资料,要用起来还蛮复杂的(对于像我这种初学者来说),所以写一下学习笔记,要把RecyclerView用起来大致分为四步吧:

1、首先要在项目中app目录下的Gradle 里面设置dependencies

dependencies {
    ………………
//    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'androidx.recyclerview:recyclerview:1.1.0' //加入这一行
………………
}

2、在UI XML里面添加RecyclerView,还有新建一个RV里面小单元的fragment.xml,比如:

==================================这是主界面,文件名activity_main.xml==========================

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/pdfview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="I am text!"
        android:scrollbars="vertical"
        android:layout_marginTop="63dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/open"
        app:layout_constraintVertical_bias="1.0" />

//………………还有好多界面元素

</androidx.constraintlayout.widget.ConstraintLayout>
===============================================================================================

 

============================这是RV里面的小单元,文件名image_row_item.xml=============

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:gravity="center_vertical">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</FrameLayout>
================================================================================

3、需要编写一个RecyclerView.Adapter

     3.1 Adapter里面要编写RecyclerView.ViewHolder: 这是RecyclerView里面显示的小单元占位类。

     那么首先就新建一个类继承RecyclerView.ViewHolder,我所需要的是用于显示pdf页面的单元,命名就以pdf开头吧:

class PdfViewHolder extends RecyclerView.ViewHolder{//pdf的显示页面占位类
    public ImageView imageView;//用一个imageView来显示pdf
    public PdfViewHolder(@NonNull View itemView) {//此类必须有一个构造方法
        super(itemView);
        imageView=(ImageView)itemView.findViewById(R.id.imageView);//imageView对象指向上面image_row_item.xml所写的imageView
    }
}

    3.2 然后再写一个RecyclerView.Adapter,命名同样以pdf开头:

class PdfViewAdapter extends RecyclerView.Adapter<PdfViewHolder>{

    Bitmap[] bitmaps;//建一个bmp的数组用来存储已经处理成bmp格式的pdf文件页面;

    public PdfViewAdapter(Bitmap[] bmp){//构造函数,传入一个bmp的数组,赋值给本类的bmp数组
        bitmaps=bmp;
    }

//以下三个方法为此类要求必须重写的方法:

    @Override
    public PdfViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {//方法的功能是对要显示的小单元内容进行打包传给小单元占位类
        View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.image_row_item,parent,false);//将小单元实例化成一个可交互的显示小单元
        return new PdfViewHolder(v);//把显示小单元传给小单元占位类
    }

    @Override
    public void onBindViewHolder(@NonNull PdfViewHolder page, int position) {//设置每个小单元显示的内容
        page.imageView.setImageBitmap(bitmaps[position]);//从bmp数组的相应位置获取图片并放入显示小单元相应的image变量中
    }

    @Override
    public int getItemCount() {
        return bitmaps.length;
    }
}

   4、然后我们在App的主方法MainActivity中调用显示我们上面写好的RecyclerView:

public class MainActivity extends Activity implements View.OnClickListener{

    Bitmap mBitmap=Bitmap.createBitmap(430,798,Bitmap.Config.ARGB_8888);
    BitmapDrawable bitmapDrawable;
    Bitmap[] bitmaps;
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Canvas canvas = new Canvas();
       //看好了,下面就是见证奇迹的时刻了:
       RecyclerView recyclerView = findViewById(R.id.pdfview);//新建一个rv对象指向界面中的rv元素
       LinearLayoutManager linearLayoutManager= new LinearLayoutManager(this);//新建一个线性布局
       recyclerView.setLayoutManager(linearLayoutManager);//设置我们的rv显示采用线性布局
       PdfViewAdapter pdfViewAdapter=new PdfViewAdapter(openPdf());//openPdf方法将pdf文件全部转化为bmp放入数组传给我们之前写好的Adapter
       recyclerView.setAdapter(pdfViewAdapter);//rv设置adapter
   }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值