Android实现recyclerview列表展开更多和点击收起功能(以本地数据为例)

本文介绍如何使用Android的RecyclerView实现列表的展开与收起功能。通过XML布局定义了一个包含RecyclerView和阴影效果的FrameLayout,使用GridLayoutManager和spanCount设置网格布局。在适配器中设置了数据绑定,并提供了展示全部数据和隐藏部分数据的方法。在代码中初始化数据,设置点击事件来切换展开和收起状态。
摘要由CSDN通过智能技术生成

首先看效果图是否是想要的,样式是灵活的,可根据需求自己去改变!
在这里插入图片描述
在这里插入图片描述
1.接下里就开始进入正题
布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/region_recy"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="12dp"
            app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
            app:spanCount="4" />
        <!-- layoutManager:布局管理器 以上是以网格布局   spanCount:网格的数量 这里以四个为主
  这只是从xml中设置   也可以从代码中设置-->

        <!-- 阴影控件设置半透明-->
        <TextView
            android:id="@+id/txt_yinying"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_gravity="bottom"
            android:background="#b3ffffff" />
    </FrameLayout>

    <!-- 展开更多,点击收起-->
    <RelativeLayout
        android:id="@+id/rl_openall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="12dp">

        <TextView
            android:id="@+id/txt_open"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#03A9F4"
            android:gravity="center"
            android:text="展开更多"
            android:textColor="#FFEB3B"
            android:textSize="14sp" />
    </RelativeLayout>

</LinearLayout>

2.适配器中设置展开以及收起数据

package com.example.test;

import android.app.Activity;
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 RegionAdapter extends RecyclerView.Adapter<RegionAdapter.ViewHolder> {
    private Activity activity;
    private List<String> list;

    public RegionAdapter(Activity activity) {
        this.activity = activity;
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(activity).inflate(R.layout.rmsf_item, parent, false);
        return new ViewHolder(view);
    }


    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.mRmsfname.setText(list.get(position));
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    //显示收起时数据
    public void setHideList(List<String> newList) {
        this.list = newList;
        notifyDataSetChanged();
        //刷新数据
    }

    //显示全部数据
    public void setOpenList(List<String> openList) {
        this.list = openList;
        notifyDataSetChanged();
        //刷新数据
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        private final TextView mRmsfname;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            mRmsfname = itemView.findViewById(R.id.rmsf_name);
        }
    }
}

3.Adapter中的xml布局 这里我相对写了个简单的 比较快

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

    <TextView
        android:id="@+id/rmsf_name"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:textSize="20dp" />

</LinearLayout>

4.代码中设置全部显示数据和收起显示数据

初始化:
private void init() {
        recyclerView = findViewById(R.id.region_recy);
        opentext = findViewById(R.id.rl_openall);
        txtOpen = findViewById(R.id.txt_open);
        txtYinying = findViewById(R.id.txt_yinying);

        regionbeans = new ArrayList<>();
        regionbeans.add("四川");
        regionbeans.add("陕西");
        regionbeans.add("北京");
        regionbeans.add("广州");
        regionbeans.add("澳门");
        regionbeans.add("福建");
        regionbeans.add("海口");
        regionbeans.add("三亚");
        regionbeans.add("黑龙江");
        regionbeans.add("辽宁");
        regionbeans.add("吉林");
        regionbeans.add("天津");
        regionbeans.add("新疆");
        regionbeans.add("内蒙古");
        regionbeans.add("甘肃");
        regionbeans.add("宁夏");
        regionbeans.add("青海");
        regionbeans.add("西藏");
        regionbeans.add("江苏");
        regionbeans.add("安徽");
        regionbeans.add("上海");
    }

 private void initData() {
        List<String> mList = new ArrayList<>();
        List<String> HideList = new ArrayList<>();
        for (int i = 0; i < regionbeans.size(); i++) {
            mList.add(regionbeans.get(i));
        }
        //收起显示的数据仅显示10条  这里的仅显示灵活变动  
        for (int i = 0; i < 10; i++) {
            HideList.add(mList.get(i));
        }
        //适配器
        mRegionAdapter = new RegionAdapter(this);
        recyclerView.setAdapter(mRegionAdapter);
        //默认设置收起时的数据
        mRegionAdapter.setHideList(HideList);

        opentext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (txtOpen.getText().toString().equals("展开更多")) {
                    txtOpen.setText("点击收起");
                    txtYinying.setVisibility(View.GONE);
                    mRegionAdapter.setOpenList(mList);
                } else {
                    txtOpen.setText("展开更多");
                    txtYinying.setVisibility(View.VISIBLE);
                    mRegionAdapter.setHideList(HideList);
                }
            }
        });
    }
Android开发中,RecyclerView是一种常用的列表展示件,它可以用于展示大量数据,并且支持自定义布局和交互效果。实现RecyclerView的加载更多功能可以通过以下步骤来完成: 1. 首先,在你的布局文件中添加RecyclerView控件,并为其指定一个唯一的id,例如: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 在你的Activity或Fragment中,找到RecyclerView控件并创建一个适配器(Adapter)来管理数据展示。适配器需要继承RecyclerView.Adapter类,并实现其中的几个方法,例如: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { // 数据集合 private List<Data> dataList; // 构造方法 public MyAdapter(List<Data> dataList) { this.dataList = dataList; } // 创建ViewHolder @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); return new ViewHolder(view); } // 绑定ViewHolder @Override public void onBindViewHolder(ViewHolder holder, int position) { Data data = dataList.get(position); // 设置数据到ViewHolder中的控件上 holder.textView.setText(data.getText()); } // 获取数据数量 @Override public int getItemCount() { return dataList.size(); } // ViewHolder类 public static class ViewHolder extends RecyclerView.ViewHolder { TextView textView; public ViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); } } } ``` 3. 在你的Activity或Fragment中,设置RecyclerView的布局管理器(Layout Manager)和适配器(Adapter),例如: ```java RecyclerView recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(new MyAdapter(dataList)); ``` 4. 实现加载更多功能,可以通过监听RecyclerView的滑动事件来实现。当用户滑动到列表底部时,触发加载更多的操作。具体实现可以参考以下步骤: - 在适配器中添加一个方法用于加载更多数据,例如: ```java public void loadMoreData(List<Data> moreDataList) { dataList.addAll(moreDataList); notifyDataSetChanged(); } ``` - 在Activity或Fragment中,为RecyclerView添加滑动监听器,并在滑动到底部时触发加载更多的操作,例如: ```java recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); int visibleItemCount = layoutManager.getChildCount(); int totalItemCount = layoutManager.getItemCount(); int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition(); if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount && firstVisibleItemPosition >= 0) { // 滑动到底部,执行加载更多的操作 // 调用适配器的加载更多方法 adapter.loadMoreData(moreDataList); } } }); ``` 这样,当用户滑动到RecyclerView的底部时,就会触发加载更多的操作,新的数据会被添加到适配器中,并通过调用`notifyDataSetChanged()`方法来列表的显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值