日历视图在 Recyclerview ViewHolder 中显示/消失仅在 Android 9 上出现问题

问题描述 投票:0回答:1

我有一个包含 2 个或更多查看者的回收者视图,

  1. 第一个浏览者只是顶部标题横幅
  2. 第二个 vlewholder 用于预订小部件,它有 3 个下拉菜单/详细菜单,包括
    CalendarView
    - 全部在一个 viewhodler 中。

问题是 CalendarView 的高度相当大,当 CalendarView 稍微离开屏幕并且我折叠/消失日历时,它会折叠但仍然占用空间,就像下面的屏幕截图一样。但奇怪的是,它只发生在

Android 9

初始屏幕截图:

问题截图(折叠简历后):

相关代码如下:

Viewholder Item 的 ClickListener:

    val clickListener = View.OnClickListener {
        // irrelevant code //
        for (type in AllOptionsEnum.values()) {
                // Expand Selected and Collapse Others
            val detailView = this.root.findViewById<ViewGroup>(type.detailViewGroupId)
            val labelView = this.root.findViewById<TextView>(type.labelViewId)
            val checkBox = this.root.findViewById<CheckBox>(type.checkBoxId)

            if (detailView.visibility == View.VISIBLE) {
                // hide detailed view
                detailView.setVisible(show = false)
                checkBox.isChecked = false
            } else {
                // show
                detailView.setVisible(show = (type.labelViewGroupId == it.id))
                checkBox.isChecked = show = (type.labelViewGroupId == it.id)
                
            }
                
        // irrelevant code //
        }
    }

扩展功能:

    fun View.setVisible(show: Boolean = true, invisible: Boolean = false) {
        if (show) this.visibility = View.VISIBLE
        else this.visibility = if (invisible) View.INVISIBLE else View.GONE
    }
android android-recyclerview visibility
1个回答
1
投票

我不确定 Android Pie (2018) 如何处理布局中的可见性更改,特别是具有复杂布局层次结构的 CalendarView。

但请注意,“Android Pvisibilityawareimagebutton.setVisibility 只能从同一个库组调用”很明确:

最佳实践:

android:visibility="Gone"

使用可见性消失意味着您的视图不会占用布局上的任何空间,而“不可见”将占用布局上不必要的空间

因此请仔细检查您的

detailView.setVisible()
函数。理想情况下,它应该看起来像:

fun View.setVisible(show: Boolean) {
    this.visibility = if (show) View.VISIBLE else View.GONE
}

所以,当你看到

setVisible(show = false)
时,就相当于在该视图上设置了
visibility = View.GONE
。然而,这是一个假设,因为您的问题中没有提供此方法的实现。

© www.soinside.com 2019 - 2024. All rights reserved.