自定义RecyclerView适配器实现列表

适配器作用:绑定布局文件的数据(数据是什么?怎么展示?)
没有导入RecyclerView依赖的请参考:https://blog.csdn.net/weixin_42230348/article/details/103020497

适配器实现准备:

1、一个RecyclerView活动+布局(布局一般是以列表的形式将数据展示出了)
2、定义一个实体类Entity:为接下来设置和传递实体数据做准备
3、ListDemoAdapter: 自定义适配器
4、item_list_demo布局: 设定数据每一行怎么展示?

具体实现如下:

1、一个RecyclerView活动+布局(布局一般是以列表的形式将数据展示出了)

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

import android.os.Bundle;

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

public class RecyclerViewActivity extends AppCompatActivity {
	
	private RecyclerView recyclerView ;
	
	private ListDemoAadapter adapter ;
	
	private List<Entity> data ;
	  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycler_view);
        recyclerView = findViewById(R.id.cycler_view) ;
        //设置布局管理器
        recylerView.setLayoutManager(new LinearLayoutManager(this)) ;
        //设置适配器
        adapter =  new ListDemoAdapter(null) ; //获得自定义适配器实例
        recyclerView.setAdapter(adapter); 
        initData();
    }
    //为实体赋值并将加载到适配器中
    private void initData(){
    	data = new ArrayList<>() ;
    	for(int i=0; i<100 ; i++){
    		Entity entity = new Entity("index" + i) ;
    		data.add(entity) ;
    	}
    	adapter.setData(data) ;
    }
}

activity_recycler_view布局

<?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=".RecyclerViewActivity">


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>

2、定义一个实体类Entity:为接下来设置和传递实体数据做准备

import android.os.Parcel;
import android.os.Parcelable;

//序列化,目的是为了数据的传输
public class Entity implements Parcelable
{

    private int count;

    private String msg;

    public Entity(int count)
    {
        this.count = count;
    }

    public Entity(int count, String msg)
    {
        this.count = count;
        this.msg = msg;
    }

    public Entity(String msg)
    {
        this.msg = msg;
    }

    public int getCount()
    {
        return count;
    }

    public void setCount(int count)
    {
        this.count = count;
    }

    public String getMsg()
    {
        return msg;
    }

    public void setMsg(String msg)
    {
        this.msg = msg;
    }

    @Override
    public int describeContents() { return 0; }

    @Override
    public void writeToParcel(Parcel dest, int flags)
    {
        dest.writeInt(this.count);
        dest.writeString(this.msg);
    }

    protected Entity(Parcel in)
    {
        this.count = in.readInt();
        this.msg = in.readString();
    }

    public static final Parcelable.Creator<Entity> CREATOR = new Parcelable.Creator<Entity>()
    {
        @Override
        public Entity createFromParcel(Parcel source) {return new Entity(source);}

        @Override
        public Entity[] newArray(int size) {return new Entity[size];}
    };
}

3、ListDemoAdapter: 自定义适配器

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

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

import java.util.List;

//自定义适配器
public class ListDemoAdapter extends RecyclerView.Adapter<ListDemoAdapter.ListViewHolder> {
    private List<Entity> data;

    public ListDemoAdapter(List<Entity> data)
    {
        this.data = data;
    }

    public void setData(List<Entity> data)
    {
        this.data = data;
        // 刷新数据
        notifyDataSetChanged();
    }

    /**
     *创建一个viewHolder并返回
     * @param parent 相当于Item存放的容器
     * @param viewType 指定布局文件的类型
     * @return 返回viewHolder对象
     */
    @NonNull
    @Override
    public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //指定对应的布局文件
       View view =  LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_demo,parent,false);
        return new ListViewHolder(view);

    }

    /**
     * 将数据加载到布局文件的控件上
     * @param holder 需要绑定数据的viewHolder
     * @param position 列表数据的下标
     */
    @Override
    public void onBindViewHolder(@NonNull ListDemoAdapter.ListViewHolder holder, int position) {
        Entity entity = data.get(position);
        holder.textView.setText(entity.getMsg());
    }

    /**
     *返回数据的大小
     * @return
     */
    @Override
    public int getItemCount() {
        return data == null ? 0 : data.size();
    }
    //为了系统复用控件
    static class ListViewHolder extends RecyclerView.ViewHolder
    {
        TextView textView;

        public ListViewHolder(@NonNull View itemView)
        {
            super(itemView);
            // 实例化该控件
            textView = itemView.findViewById(R.id.tv_text);
        }
    }
}

4、item_list_demo布局: 设定数据每一行怎么展示?

<?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="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:padding="30dp"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="TextView"
        tools:textColor="@color/colorPrimary"
        tools:textSize="30sp" />

    <View
        android:id="@+id/textView7"
        android:layout_width="0dp"
        android:layout_height="2dp"
        android:layout_marginBottom="4dp"
        android:background="#4E0B0B"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tv_text" />


</androidx.constraintlayout.widget.ConstraintLayout>

ok,大功告成!!!
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现RecyclerView适配器的实例,你可以按照以下步骤进行操作: 1. 首先,在你的项目中添加RecyclerView的依赖。你可以在项目的 build.gradle 文件中的 dependencies 部分添加以下代码: ``` implementation 'androidx.recyclerview:recyclerview:1.2.0' ``` 2. 在你的布局文件中,添加一个RecyclerView控件。例如,你可以在一个 activity_main.xml 文件中添加以下代码: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. 创建一个新的 Java 类,作为你的RecyclerView适配器。例如,你可以创建一个名为 MyAdapter 的类: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { // 创建并返回一个ViewHolder View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { // 绑定数据到ViewHolder上 String item = mData.get(position); holder.textView.setText(item); } @Override public int getItemCount() { // 返回数据项的数量 return mData.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { TextView textView; public ViewHolder(@NonNull View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); } } } ``` 4. 创建一个新的布局文件,用于每个数据项的显示。例如,你可以创建一个名为 item_layout.xml 的布局文件,并在其中添加一个 TextView 控件: ```xml <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" /> ``` 5. 在你的 Activity 或 Fragment 中,初始化 RecyclerView适配器,并将适配器设置给 RecyclerView: ```java RecyclerView recyclerView = findViewById(R.id.recyclerView); List<String> data = new ArrayList<>(); // 添加数据到data列表中 MyAdapter adapter = new MyAdapter(data); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); ``` 这样,你就成功地创建了一个简单的RecyclerView适配器实例。你可以根据自己的需求自定义适配器和布局文件,并在 onBindViewHolder 方法中绑定适配器的数据项。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值