liangjingkanji / BRV

[使用文档] Android 快速构建 RecyclerView, 比 BRVAH 更简单强大
http://liangjingkanji.github.io/BRV/
MIT License
2.49k stars 317 forks source link

PageRefreshLayout无法设置多个空缺省页 #422

Open BestDreams opened 5 months ago

BestDreams commented 5 months ago

问题描述

PageRefreshLayout只能设置一个空缺省页,如果我是一个带Tab标签的列表,不同标签的Tab要显示不同的空缺省页。 如下图所示

  1. PageRefreshLayout的addData方法里,调用showEmpty()时由于不支持传tag,导致StateLayout.showEmprt()一直取的第一次设置的空缺省页
  2. PageRefreshLayout的onEmpty只会回调一次(与问题1是同一个原因导致的)

期望结果

1.PageRefreshLayout的addData方法里的showEmpty支持传tag 2.PageRefreshLayout的onEmpty每次显示都能回调

截图

1706064315940 image

版本

liangjingkanji commented 5 months ago

一般情况我都会根据Fragment的arguments来在代码中动态赋值当前Fragment的缺省页, 这种似乎更加合理和简单直接

如果你有更好的处理方式可以提出

BestDreams commented 5 months ago

我这个页面不是那种一个Tab对应一个Fragment的,就是一个Activity里PageRefreshLayout套一个RecyclerView,切换Tab就调接口刷新列表,接口里的某个参数根据tab赋值。

我这边目前想到的方案,就是如果不动框架的话: 就是禁用PageRefreshLayout里的StateLayout,然后PageRefreshLayout套StateLayout套RecyclerView,自己根据接口的数据手动调用StateLayout去设置。

如果动框架的话,目前想到几种方式,可能不是最佳的:

  1. 在addData方法上加一个可空的tag参数(动主要方法的参数,可能对已经在用框架的影响太大,估计不太现实);
  2. 加一个获取tag的callback,在addData里调用showEmpty时传入,伪代码: val getEmptyTag: () -> String? fun addData(){

    ......

    if (isEmpty()) { showEmpty(getEmptyTag.invoke()) return }

    ......

}

XXQAQ commented 4 months ago

联系我,我有完美解决的方案

liangjingkanji commented 3 months ago

PageRefreshLayout自定义一个扩展函数不就行了, 例如addDataWithTag()