Android——RecycleView组件的简单使用

简介:RecyclerView提供了一个相对于ListView耦合度更低的方式来复用ViewHolder,并且可以轻松的实现ListView、GridView以及瀑布流的效果。我们可以把RecyclerView看成是ListView的升级版本,它可以更加方便实现横纵列表,还有看起来比较灵性的瀑布流,它属于一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式。

下面将简单使用一下RecyclerView:
一、创建一个新项目命名为“RecyclerViewDemo”,系统会自己创建一个MainActivity.java和activity_main.xml文件及一些附属文件。然后我们需要创建一个RecycleAdapter.java文件并继承RecyclerView.Adapter类。
代码如下:

RecycleAdapter.java

package com.example.recycleviewdemo;

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

import androidx.recyclerview.widget.RecyclerView;

/*
① 创建一个继承RecyclerView.Adapter<VH>的Adapter类
② 创建一个继承RecyclerView.ViewHolder的静态内部类
③ 在Adapter中实现3个方法:
   onCreateViewHolder()
   onBindViewHolder()
   getItemCount()
*/
public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.MyViewHolder>{
    private Context context;
    private ContentProvider contentProvider;

    //构造方法,传入数据
    public RecycleAdapter(Context context){
        this.context = context;
        contentProvider = new ContentProvider(10);
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //创建ViewHolder,返回每一项的布局
        // 引入自定义列表项的资源文件;
        MyViewHolder myViewHolder =
                new MyViewHolder(LayoutInflater.from(context)
                        .inflate(R.layout.template, null));

        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        //将数据和控件绑定
        holder.tv1
                .setText(contentProvider.getProduct().get(position).toString());

        holder.iv1
                .setImageResource(contentProvider.getImg().get(position));
    }

    @Override
    public int getItemCount() {
        //返回Item总条数
        return contentProvider.getId().size();
    }

    //内部类,绑定控件
    class MyViewHolder extends RecyclerView.ViewHolder{
        TextView tv1;
        ImageView iv1;

        public MyViewHolder(View itemView) {
            super(itemView);

            tv1 = itemView.findViewById(R.id.tv1);
            iv1 = itemView.findViewById(R.id.iv1);
        }
    }
}

其中最主要的是实现3个继承自RecyclerView.Adapter的抽象方法 public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {……}、 public void onBindViewHolder(MyViewHolder holder, int position) {……} 、 public int getItemCount() {……},这三方法的作用见代码注释部分。同时创建一个内部类MyViewHolder并继承RecyclerView.ViewHolder类,其作用是绑定RecyclerView每个项目模板的控件,具体见代码。

二、编写RecyclerView每个项目的模板
template.xml

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

    <ImageView
        android:id="@+id/iv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true">

    </ImageView>

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#e20707"
        android:textSize="45sp">

    </TextView>


</RelativeLayout>

三、为了演示其效果,小编创建了一个ContentProvider.java文件,主要用于提供多条项目的内容。
ContentProvider.java

package com.example.recycleviewdemo;

import java.util.ArrayList;
import java.util.List;

public class ContentProvider {
    private List id;
    private List product;
    private List<Integer> img;

    private int[] Img = {
            R.drawable.a,R.drawable.b,R.drawable.c,
            R.drawable.d,R.drawable.e,R.drawable.f,
            R.drawable.g,R.drawable.h,R.drawable.i,
            R.drawable.j};


    //初始化一组数据,便于向RecycleView中自动添加内容
    public ContentProvider(int num) {
        List id= new ArrayList();
        List product = new ArrayList();
        List<Integer> img = new ArrayList<Integer>();

        for (int i = 0; i < num; i++) {
           id.add(i);
           product.add("这是第 "+i+" 种商品");
           img.add(Img[i]);
        }

        this.id = id;
        this.product = product;
        this.img = img;
    }

    public List getId() {
        return id;
    }

    public List getProduct() {
        return product;
    }

    public List<Integer> getImg() {
        return img;
    }

}

四、现在我们需要在布局文件activity_main.xml添加RecycleView组件并在MainActivity.java中绑定组件并设置显示效果,分割线等,具体代码如下:
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="展示效果如下:" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/myrecycleView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center">

    </androidx.recyclerview.widget.RecyclerView>


</LinearLayout>

MainActivity.java

package com.example.recycleviewdemo;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.widget.LinearLayout;



public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;


    @SuppressLint("WrongConstant")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.myrecycleView);

        //垂直显示效果
        recyclerView.setLayoutManager(new LinearLayoutManager(
                this,
                LinearLayout.VERTICAL,
                false));

        //水平显示效果
//        recyclerView.setLayoutManager(new LinearLayoutManager(
//                        this,
//                        LinearLayout.HORIZONTAL,
//                        false));

        //网格垂直显示效果
//        recyclerView.setLayoutManager(new GridLayoutManager(
//                this,
//                3,
//                GridLayoutManager.VERTICAL,
//                false));

        //网格水平显示效果
//        recyclerView.setLayoutManager(new GridLayoutManager(
//                this,
//                3,
//                GridLayoutManager.HORIZONTAL,
//                false));

        //系统自带分割线
        recyclerView.addItemDecoration(new DividerItemDecoration(
                this,
                DividerItemDecoration.VERTICAL));

//        recyclerView.addItemDecoration(new DividerItemDecoration(
//                this,
//                DividerItemDecoration.HORIZONTAL));

        recyclerView.setAdapter(new RecycleAdapter(this));


    }


}

这样我们就简单实现了RecycleView的使用,效果图如下:
在这里插入图片描述

Android——RecycleView点击和长按事件的实现

发布了6 篇原创文章 · 获赞 3 · 访问量 2033

猜你喜欢

转载自blog.csdn.net/qq_43567345/article/details/104156326
今日推荐