Android Can';t在约束组上设置可见性

Android Can';t在约束组上设置可见性,android,kotlin,android-constraintlayout,kotlin-android-extensions,Android,Kotlin,Android Constraintlayout,Kotlin Android Extensions,当我尝试在单击按钮时设置组的可见性时,它不会影响视图的可见性。使用com.android.support.constraint:constraint layout:1.1.0-beta4。我试着将其设置为元素,没有问题,但在团队中没有成功 我的主要活动.kt private fun toggleLoginUI(show: Boolean) { if (show) { group.visibility = VISIBLE } else { group

当我尝试在单击按钮时设置组的可见性时,它不会影响视图的可见性。使用com.android.support.constraint:constraint layout:1.1.0-beta4。我试着将其设置为元素,没有问题,但在团队中没有成功

我的主要活动.kt

private fun toggleLoginUI(show: Boolean) {
    if (show) {
        group.visibility = VISIBLE
    } else {
        group.visibility = INVISIBLE
    }
}

fun onClick(view: View) {
    when (view.id) {
        R.id.button -> toggleLoginUI(true)
        R.id.button4 -> toggleLoginUI(false)
    }
}
private fun toggleLoginUI(show: Boolean) {
    if (show) {
        setGroupVisibility(mLayout, group, Group.VISIBLE)
    } else {
        setGroupVisibility(mLayout, group, Group.INVISIBLE)
    }
}

private fun setGroupVisibility(layout: ConstraintLayout, group: Group, visibility: Int) {
    val refIds = group.referencedIds
    for (id in refIds) {
        layout.findViewById<View>(id).visibility = visibility
    }
}
我的活动\u main.xml

    <android.support.constraint.ConstraintLayout..

            <TextView
                android:id="@+id/textView"
... />

            <TextView
                android:id="@+id/textView2"
... />

            <Button
                android:id="@+id/button"
.../>

            <Button
                android:id="@+id/button4"
... />


            <android.support.constraint.Group
                android:id="@+id/group"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:visibility="visible"
                app:constraint_referenced_ids="textView,textView2" />
            </android.support.constraint.ConstraintLayout>

只需添加以下行即可更改。
所以它是可见的

group.visibility=ConstraintLayout.GONE

更新:这在ConstraintLayout 2.0.0 beta 6版中报告为已修复。看



对我来说这看起来像个虫子<“代码>消失了”
有效,但“不可见”无效,我认为应该这样做。它可能值得一个bug报告,除非有人能发布我的想法是错误的。(我使用的是
约束布局:1.1.0-beta4

同时,这里有一个解决方法,它显式地检索组内的ID,并设置每个检索到的视图的可见性

在MainActivity.kt内

private fun toggleLoginUI(show: Boolean) {
    if (show) {
        group.visibility = VISIBLE
    } else {
        group.visibility = INVISIBLE
    }
}

fun onClick(view: View) {
    when (view.id) {
        R.id.button -> toggleLoginUI(true)
        R.id.button4 -> toggleLoginUI(false)
    }
}
private fun toggleLoginUI(show: Boolean) {
    if (show) {
        setGroupVisibility(mLayout, group, Group.VISIBLE)
    } else {
        setGroupVisibility(mLayout, group, Group.INVISIBLE)
    }
}

private fun setGroupVisibility(layout: ConstraintLayout, group: Group, visibility: Int) {
    val refIds = group.referencedIds
    for (id in refIds) {
        layout.findViewById<View>(id).visibility = visibility
    }
}

在将组可见性更改为
View.INVISIBLE
后,您也可以简单地调用
requestLayout
方法

fun makeGroupInvisible(group: Group) {
    group.visibility = View.INVISIBLE
    group.requestLayout()
}

问题是,
android.support.constraint.Group
updatePreLayout
方法中更新其成员的可见性,该方法是从
onMeasure
ConstraintLayout

android.support.constraint.Group中调用的

 public void updatePreLayout(ConstraintLayout container) {
   ...
 }
这会更新孩子的可视性,所以呼叫

dataGroup.visibility = if (visible) View.VISIBLE else View.INVISIBLE
dataGroup.updatePreLayout(root)

为我工作

只是清理你的项目或重建你的项目

有同样的问题,上面没有任何帮助。我的解决方案是
setVisibility(viewId,ConstraintSet.VISIBLE)
在约束集中,并将其应用于ConstraintLayout视图

例如:

myContstraintSet.apply {
    setVisibility(firstGroup.id, ConstraintSet.VISIBLE)
    setVisibility(secondGroup.id, ConstraintSet.GONE)

    connect(oneView.id, ConstraintSet.BOTTOM, R.id.secondView, ConstraintSet.TOP)
    clear(anotherView.id, ConstraintSet.TOP)
}
myContstraintSet.applyTo(myConstraintLayout)

看看问题出在哪里给日志日志中没有错误。它只是不起任何作用用屏幕敲我的头来解决这个问题。这是可行的,但希望找到一种不需要在元素之间循环的方法。谢谢你的回答。希望它得到解决。@SS2095如果它是一个错误,那么你将不得不等待未来释放。(我认为这是一个bug。)如果您需要该功能,这是过渡期间可以做的最好的事情。是否有人报告了该bug并与之有链接?@TorstenGrote?我还看到了对
ConstraintLayout
2.0“Layer”功能的引用,该功能可能在某种程度上是适用的。我实际上在不久前提出了一个与此相关的问题,因为我同意@Cheticamp,这是Group类中的一个bug:我不同意这个答案,这个问题是关于使用View.INVISIBLE的。使用ConstraintLayout.GONE与使用View.GONE相同。这是一种不同类型的可见性设置,它可以工作。这没有意义,这应该是修复,但它是。很明显,关于这个组的某些内容有问题,可能与Android Studio有关。这对我没有帮助。请分享您的代码,以便我们了解您的问题。Thx,花了2天时间找到“requestLayout()”解算器谢谢!这对我来说很有效,但这能被认为是约束布局的一个缺陷吗?在每次可见性更改后调用requestLayout()似乎不太正常。requestLayout()也为我解决了这个问题。这一定是一个错误。这个答案很简单,有效,并且使用了库提供的方法。这应该是正确的答案