我想在RecyclerView中实现可扩展项,并且当一项扩展时,另一项扩展项必须自动关闭,有人可以帮忙吗?
答案 0 :(得分:2)
1。。在您的适配器中,使用两个变量,它们可以容纳currentExpandable和previousExpandable位置。
private var previousExpandedPosition = -1
private var currentExpandedPosition = -1
2。 在扩展行的地方对其进行初始化。就我而言,单击该行即可扩展视图。因此,我在ViewHolder中分配它。
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
init {
itemView.myExpandableView.setOnClickListener {
previousExpandedPosition = currentExpandedPosition
currentExpandedPosition = adapterPosition
if (previousExpandedPosition == currentExpandedPosition) {
currentExpandedPosition = -1
}
notifyItemChanged(previousExpandedPosition)
notifyItemChanged(currentExpandedPosition)
}
}
}
3。。在您的onBindViewHolder方法中,如果该位置当前处于展开状态,请查看“展开”位置,否则将其折叠。
if (position == currentExpandedPosition) {
// showExpandedView
} else {
// showCollapsedView
}
答案 1 :(得分:1)
根据要求在主Recylerview的ViewHolder中使用自定义视图,并在 DataList (ArrayList)中使用 flag (boolean)命名为“ isColapsed ”,当您希望所有视图都折叠时,最初为 false 。
显示或隐藏内部自定义视图然后将内部RecyclerView的可见性设置为 VISIBLE ,或者如果 isCollapsed 为 false ,则将可见性设置为 VISIBLE 。< / p>
每次您选择要扩展的视图,然后将 DataList (ArrayList)中的所有其他( isCollapsed )标志设置为 true ,除非特定位置的标志为 false ,然后最重要的是使用 notifyDataSetChanged(); 方法来更新您的UI。
答案 2 :(得分:1)
您可以使用notifyDataSetChanged()。
保留一个布尔值以标识是否展开的项目。例如,假设您要显示一个学生列表,然后单击一个学生,则展开该项目并显示该学生的详细信息。
class Student{
String name;
String age;
boolean isexpanded;
}
单击项目时,将单击的项目设置为'isexpanded = true',并将列表中的所有其他项目设置为'isexpanded = false'。
,然后调用notifyDataSetChanged()更新RecyclerView。 (在适配器类内部,您必须通过选中“ isexpanded”来管理扩展视图的扩展和关闭)
(我是Android新手,不确定是否是最好的解决方案)