一文搞懂Android RecyclerView点击展开、折叠效果的实现代码
作者:吕氏春秋i 时间:2023-02-17 14:52:24
RecyclerView是什么
RecycleView是Android5.0后谷歌推出的一个用于在有限的窗口中展示大量数据集的控件,位于support-v7包中。它可以实现与ListView和GridView一样的效果,提供了一种插拔式的体验,高度的解耦,异常的灵活,只需设置其提供的不同的LayoutManager,ItemAnimator和ItemDecoration,就能实现不同的效果。
RecyclerView的优点
1、支持局部刷新。
2、可以自定义item增删时的动画。
3、能够实现item拖拽和侧滑删除等功能。
4、默认已实现View的复用,而且回收机制更加完善。
实现效果
思路
我使用的是第三方适配器BaseRecyclerViewAdapterHelper
但是遇到一个问题
这个适配器2.0和3.0不兼容 而2.0版本 没有折叠效果这个组件 我用3.0版本 gradle一直依赖不了
怎么办?
只能寻找其他方法来实现 我想到的是在用两层 RecyclerView
的办法
在第一次的item布局里嵌套第二次RecyclerView
觉得可行 就开始写代码 最终结果还可以优化 就是上面的样子 实现了点击折叠和展开的效果
代码
代码实现比较简单
唯一要说的就是通过一个Flag
来更改折叠状态
在第一层的adapter
中可以设置一个标记位
//默认是关闭
private boolean isOpen = false;
public boolean isOpen() {
return isOpen;
}
public void setOpen(boolean open) {
isOpen = open;
}
然后在 convert
方法中 来切换数据的状态
if (isOpen) {
mRecyclerView.setVisibility(View.VISIBLE);
linearLayout.setVisibility(View.VISIBLE);
view.setBackgroundResource(R.mipmap.icon_more_than_open);
} else {
mRecyclerView.setVisibility(View.GONE);
linearLayout.setVisibility(View.GONE);
view.setBackgroundResource(R.mipmap.icon_more_than);
}
最后在数据展示的那个页面 调用Adapter里的折叠方法
mAdapter.setOnItemClickListener((adapter, view, position) -> {
if (mAdapter.isOpen()) {
mAdapter.setOpen(false);
} else {
mAdapter.setOpen(true);
}
//这个是渲染数据后 刷新 不然看不到数据
mAdapter.notifyDataSetChanged();
});
最后提示
adapter里的布局 建议设置成 wrap_content
android:layout_width="match_parent"
android:layout_height="wrap_content"
为什么呢?
如果设置了固定尺寸 他是没有那种折叠效果的 会占的空间比较大 数据多少 排版很难看
来源:https://blog.csdn.net/Life_s/article/details/118150917