在我的例子中,我有一个对象列表,每个对象都有一个其他对象的列表,例如:
class Parent(val title, val childs: List<Child>)
class Child(val title)
上面的代码是一个例子,还有很多字段需要实现,比如图像(为了问题的简单起见,让它保持简单)。
现在我要的是:
- 对父项和子项使用自定义布局
- 子项必须显示在父项内
基于以上所述,我决定在RecyclerView
中使用RecyclerView
。
其他选项包括:
- 父
RecyclerView
将是可滚动的,但是子RecyclerView
将具有固定的高度(因此不需要实现嵌套滚动)。 - 两个
RecyclerView
都具有垂直方向。 - 当点击父项时,子项
RecyclerView
的可见性将被切换(这与实际问题不是很相关,只是为了了解我的想法)。
使用我糟糕的技能,我将初始化父RecyclerView.ViewHolder
和onBindViewHolder
方法(父RecyclerView.Adapter
的)中的子RecyclerView
。我将赋值LayoutManager
,并将子RecyclerView.Adapter
初始化/赋值给子RecyclerView
。
我还将实现一个Listener
,当单击一个子项时,将调用一个包含两个参数(父项的索引和子项的索引)的回调。
我知道如何实现我上面描述的,实际的问题是这是否是“正确的”或者更好地说,最好的实践。
就我所知,这个实现看起来很脏,而且不是很优化(也许我错了)。我希望你能解释一下是否有更好的方法来实现我上面描述的东西(如果可能的话,用例子)。如果没有,解释一下为什么没有更好的方法也会很有用。
1条答案
按热度按时间btxsgosb1#
有多种方式来继续这一点。
Parent
的ViewHolder
的 init 块中“设置”Child
的RecyclerView
,这样你就不会在Parent
的项目绑定过程中做太多的工作。而且,我将使用这个方法,因为它更容易实现:当单击父项时,子RecyclerView的可见性将被切换(这与实际问题不是很相关,只是为了了解我的想法)。
功能,所以这是有点相关的,在这方面,你可以有一个更难的时间来实现它使用下一个方法。
RecyclerView.Adapter
的viewType
,您可以使用它来区分Parent
和Child
模型类型,这样您就可以为每种类型使用相应的ViewHolder
,使列表看起来像是具有清晰部分的列表,这个方法非常适合制作一个包含节的列表,但是,创建切换功能需要仔细考虑如何隐藏ViewHolders
,方法是专门查找它们或使用额外的变量保存部分的状态和对RecyclerView.Adapter
的ViewHolder
的***bind()***方法的仔细条件,这可能会也可能不会引起头痛。所以基本上我会用第一种方法。希望这有帮助!