kotlin 在RecyclerView中包含RecyclerView是否是最佳做法

jk9hmnmh  于 2022-12-04  发布在  Kotlin
关注(0)|答案(1)|浏览(188)

在我的例子中,我有一个对象列表,每个对象都有一个其他对象的列表,例如:

class Parent(val title, val childs: List<Child>)
class Child(val title)

上面的代码是一个例子,还有很多字段需要实现,比如图像(为了问题的简单起见,让它保持简单)。
现在我要的是:

  • 对父项和子项使用自定义布局
  • 子项必须显示在父项内

基于以上所述,我决定在RecyclerView中使用RecyclerView
其他选项包括:

  • RecyclerView将是可滚动的,但是子RecyclerView将具有固定的高度(因此不需要实现嵌套滚动)。
  • 两个RecyclerView都具有垂直方向。
  • 当点击父项时,子项RecyclerView的可见性将被切换(这与实际问题不是很相关,只是为了了解我的想法)。

使用我糟糕的技能,我将初始化父RecyclerView.ViewHolderonBindViewHolder方法(父RecyclerView.Adapter的)中的子RecyclerView。我将赋值LayoutManager,并将子RecyclerView.Adapter初始化/赋值给子RecyclerView
我还将实现一个Listener,当单击一个子项时,将调用一个包含两个参数(父项的索引和子项的索引)的回调。
我知道如何实现我上面描述的,实际的问题是这是否是“正确的”或者更好地说,最好的实践。
就我所知,这个实现看起来很脏,而且不是很优化(也许我错了)。我希望你能解释一下是否有更好的方法来实现我上面描述的东西(如果可能的话,用例子)。如果没有,解释一下为什么没有更好的方法也会很有用。

btxsgosb

btxsgosb1#

有多种方式来继续这一点。

  • 我将使用的方法是你上面描述的方法,但是,你应该小心,这样你就可以在ParentViewHolderinit 块中“设置”ChildRecyclerView,这样你就不会在Parent的项目绑定过程中做太多的工作。而且,我将使用这个方法,因为它更容易实现:

当单击父项时,子RecyclerView的可见性将被切换(这与实际问题不是很相关,只是为了了解我的想法)。
功能,所以这是有点相关的,在这方面,你可以有一个更难的时间来实现它使用下一个方法。

  • 另一种方法是实现一个适配器,它考虑了RecyclerView.AdapterviewType,您可以使用它来区分ParentChild模型类型,这样您就可以为每种类型使用相应的ViewHolder,使列表看起来像是具有清晰部分的列表,这个方法非常适合制作一个包含节的列表,但是,创建切换功能需要仔细考虑如何隐藏ViewHolders,方法是专门查找它们或使用额外的变量保存部分的状态和对RecyclerView.AdapterViewHolder的***bind()***方法的仔细条件,这可能会也可能不会引起头痛。

所以基本上我会用第一种方法。希望这有帮助!

相关问题