Basic use of RecyclerView + click to add list data + pull down to refresh, pull up to load more

1. The basic use of RecyclerView.

Step 1: Add recyclerview control.

Step 2: Create a layout file (xml) + a separate class to control the controls in the layout (MyViewHolder).

Step 3: Create an adapter MyAdapter, copy the layout file n times, and populate the layout file to recyclerview.

Step 4: Modify the MainActivity code. Set adapter and display layout for recyclerview.

        recyclerView=findViewById(R.id.recycle);
        myAdapter=new MyAdapter();
        recyclerView.setAdapter(myAdapter);
        //recyclerView.setLayoutManager(new LinearLayoutManager(this));//设置布局文件的显示方式
        recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));//设置为水平显示
        //recyclerView.setLayoutManager(new GridLayoutManager(this,2));设置为两列显示

 2. Add button, click to add data.

        //往recyclerview里添加数据
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                stringList.add("test7");
                stringList.add("test8");
                stringList.add("test9");
                stringList.add("test10");
                stringList.add("test11");
                stringList.add("test12");
                //重新刷新一下列表控件的数据
                myAdapter.notifyDataSetChanged();
            }
        });

3. Third-party open source controls, pull down to refresh, pull up to load more.

1. Add dependencies. bulid.gradle.

    implementation  'io.github.scwang90:refresh-layout-kernel:2.0.5'//核心必须依赖
    implementation  'io.github.scwang90:refresh-header-classics:2.0.5'//经典刷新头
    implementation  'io.github.scwang90:refresh-header-radar:2.0.5'//雷达刷新头
    implementation  'io.github.scwang90:refresh-header-falsify:2.0.5'//虚拟刷新头
    implementation  'io.github.scwang90:refresh-header-material:2.0.5' //谷歌刷新头
    implementation  'io.github.scwang90:refresh-header-two-level:2.0.5' //二级刷新头
    implementation  'io.github.scwang90:refresh-footer-ball:2.0.5' //球脉冲加载
    implementation  'io.github.scwang90:refresh-footer-classics:2.0.5' //经典加载

Add in the gradle.properties file.

android.enableJetifier=true

2. Add the SmartRefreshLayout layout in the layout file. Embed recyclerview into that layout.

<com.scwang.smart.refresh.layout.SmartRefreshLayout
    android:id="@+id/refresh_layout"
    android:layout_width="match_parent"
    android:layout_height="400dp"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintLeft_toLeftOf="parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycle"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</com.scwang.smart.refresh.layout.SmartRefreshLayout>

3. Use in activity.

 Fourth, the source code.

1、MainActivity

package com.hnucm.recyclerview;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.scwang.smart.refresh.footer.ClassicsFooter;
import com.scwang.smart.refresh.header.ClassicsHeader;
import com.scwang.smart.refresh.header.TwoLevelHeader;
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
import com.scwang.smart.refresh.layout.api.RefreshLayout;
import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener;
import com.scwang.smart.refresh.layout.listener.OnRefreshListener;

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

public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    MyAdapter myAdapter;
    List<String> stringList=new ArrayList<>();//长度可变数组
    SmartRefreshLayout refresh;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView=findViewById(R.id.recycle);
        myAdapter=new MyAdapter();
        recyclerView.setAdapter(myAdapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));//设置布局文件的显示方式
        //recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));//设置为水平
        //recyclerView.setLayoutManager(new GridLayoutManager(this,2));设置为两列显示

        stringList.add("test1");
        stringList.add("test2");
        stringList.add("test3");
        stringList.add("test4");
        stringList.add("test5");
        stringList.add("test6");

        //往recyclerview里添加数据
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                stringList.add("new test7");
                stringList.add("new test8");
                stringList.add("new test9");
                stringList.add("new test10");
                stringList.add("new test11");
                stringList.add("new test12");
                //重新刷新一下列表控件的数据
                myAdapter.notifyDataSetChanged();
            }
        });
        refresh=findViewById(R.id.refresh_layout);
        //设置刷新头部效果  TwoLevelHeader下拉可以进入二楼,类似QQ微信下拉
        refresh.setRefreshHeader(new TwoLevelHeader(this));
        //设置刷新尾部效果
        refresh.setRefreshFooter(new ClassicsFooter(this));
        //设置下拉刷新动作
        refresh.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                stringList.add("Refresh test7");
                stringList.add("Refresh test8");
                myAdapter.notifyDataSetChanged();
                refresh.finishRefresh(2000);
            }
        });
        //设置上拉加载更多动作
        refresh.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
                stringList.add("add test7");
                stringList.add("add test8");
                myAdapter.notifyDataSetChanged();
                refresh.finishLoadMore(2000);
            }
        });

    }
    //将布局文件复制n次
    public class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
        //加载并返回布局文件
        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {//设置显示
            //content 在内部类中传外部类。类名  不在内部类this
            View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.item_chat,parent,false);
            MyViewHolder myViewHolder =new MyViewHolder(view);
            return myViewHolder;
        }
        //填充内容
        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
            holder.textView.setText(stringList.get(position));
         //滚动控件的点击事件
            holder.rootView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent=new Intent(MainActivity.this,MainActivity2.class);
                    startActivity(intent);
                }
            });

        }
        //将布局复制的次数返回  记录有多少个recyclerview子项
        @Override
        public int getItemCount() {
            return stringList.size();
        }
    }

    //控制布局文件的控件
    public class MyViewHolder extends RecyclerView.ViewHolder{//拿控件

        TextView textView;
        ConstraintLayout rootView;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            textView=itemView.findViewById(R.id.textView);
            rootView=itemView.findViewById(R.id.rootview);
        }
    }
}

2、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">

<com.scwang.smart.refresh.layout.SmartRefreshLayout
    android:id="@+id/refresh_layout"
    android:layout_width="match_parent"
    android:layout_height="400dp"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintLeft_toLeftOf="parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycle"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</com.scwang.smart.refresh.layout.SmartRefreshLayout>



    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="30dp"
        android:layout_marginBottom="16dp"
        android:text="添加数据"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

3、item_chat.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:id="@+id/rootview"
    android:layout_width="match_parent"
    android:layout_height="80dp">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="55dp"
        android:layout_height="55dp"
        android:layout_marginStart="14dp"
        android:layout_marginTop="14dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_launcher_background" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:text="TextView"
        app:layout_constraintStart_toEndOf="@+id/imageView"
        app:layout_constraintTop_toTopOf="@+id/imageView" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        app:layout_constraintBottom_toBottomOf="@+id/imageView"
        app:layout_constraintStart_toStartOf="@+id/textView" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        android:text="TextView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="@+id/textView" />

</androidx.constraintlayout.widget.ConstraintLayout>

Guess you like

Origin blog.csdn.net/qq_58451437/article/details/126794499