【问题标题】:Constraint layout Layout Crashing : All Children of constraint layout should have ids to use constraint set约束布局布局崩溃:约束布局的所有子项都应具有使用约束集的 id
【发布时间】:2018-11-04 17:11:36
【问题描述】:

更新到com.android.support.constraint:constraint-layout:1.1.0

约束布局崩溃说:

约束布局的所有子级都应该有 id 来使用约束 设置

即使它崩溃了,我也为所有视图设置了 ID。

java.lang.RuntimeException: All children of ConstraintLayout must have ids to use ConstraintSet at android.support.constraint.ConstraintSet.clone(ConstraintSet.java:687) at com.zoho.notebook.views.SettingsViewNavBar.showNoteSettingsView(SettingsViewNavBar.java:594) at com.zoho.notebook.views.SettingsViewNavBar.onClick(SettingsViewNavBar.java:303)

【问题讨论】:

  • 你遇到了什么错误
  • 你介意分享mvce吗?
  • 请把你的布局和你使用约束集的方式,否则很难给你解决你的问题。
  • 请发布布局文件

标签: android android-constraintlayout


【解决方案1】:

我的代码中有同样的错误。我有 xml 中所有视图的 ID,但是我使用

手动将视图添加到约束布局(工具提示视图)
constraintParent.addView(childView)

如果重新绘制约束布局(应用程序转到 bg 并恢复),动态添加的视图仍位于父级上,但此异常已被触发。

我通过为这样的动态视图生成视图 ID 来修复它

CustomViewChildView childView = new CustomViewChildView()
childView.setId(View.generateViewId()); 

然后将其添加到约束布局中。

【讨论】:

  • 不适合我,我没有动态添加视图,所有子视图都有 id,但是 Steel 崩溃并出现相同的错误
  • @JemoMgebrishvili 请仔细检查您的代码。当我遇到错误时,它要么在 xml 中缺少 id,要么在动态添加视图时(可能是不可见的)
  • 只是为了澄清您应该使用:nameOfChildView.setId(View.generateViewId()); 将“nameOfChildView”替换为您的“ChildView”变量名。
【解决方案2】:

别忘了给 ConstraintLayout 一个 id

我忘记了这一点,它使我的代码崩溃了。这在错误中并不是很明显。

【讨论】:

  • 你成就了我的一天!
【解决方案3】:

我只是想出如何解决这个问题。请注意,您必须声明 ConstrainLayout 上的所有视图都设置了 id,请查看以下示例:

在案例 1 中,它工作成功。

<android.support.constraint.ConstraintLayout 
    android:id="@+id/viewGroup"
    ...>
    <ImageView
        android:id="@+id/imgId"
        ... />
    <TextView
        android:id="@+id/txtId"
        ... />

如果下面的情况 2 不起作用。

<android.support.constraint.ConstraintLayout 
        android:id="@+id/viewGroup"
        ...>
        <ImageView
            android:id="@+id/imgId"
            ... />
        <TextView
          // do not set ids
            ... />

希望对你有帮助。

【讨论】:

    【解决方案4】:

    在我意识到我没有为 ConstraintLayout 中的某些子元素提供 ID 之前,我收到了这个错误。因此,请确保您也不要忘记这样做。

    【讨论】:

      【解决方案5】:

      就我而言 不要忘记将 ID 添加到 contraintLayout 的所有子项

      【讨论】:

        【解决方案6】:

        当我尝试在onGlobalLayout() 添加新视图时出现此错误(在主布局完成后)。布局中的所有 id 都是正确的,设置了新的动态视图 ID(使用setId())。但故障"All Children of constraint layout should have ids to use constraint set"不断发生。

        当我将View 添加到onCreate() 时,一切都很顺利。我只需要更改关于如何放置新View 的逻辑,因为其他视图的位置未在onCreate() 确定。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-12
          • 2022-11-02
          • 1970-01-01
          • 2019-03-29
          • 1970-01-01
          • 2013-01-18
          相关资源
          最近更新 更多