如何在recyclerview中重复所有视图?

时间:2019-05-30 11:00:39

标签: android kotlin android-recyclerview

我想在RecyclerView中实现可扩展项,并且当一项扩展时,另一项扩展项必须自动关闭,有人可以帮忙吗?

3 个答案:

答案 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

  • 如果 isColapsed true ,则根据标志状态
  • 显示隐藏内部自定义视图然后将内部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新手,不确定是否是最好的解决方案)