ConstraintSet 克隆崩溃

M. *_*han 4 android android-constraintlayout

我正在尝试克隆 ConstraintSet,如下所示:

        ConstraintLayout cl = findViewById(R.id.mainActivityParentCl);
        ConstraintSet constraintSet = new ConstraintSet();
        constraintSet.clone(cl);
Run Code Online (Sandbox Code Playgroud)

它在克隆(cl)上崩溃,

Caused by: java.lang.RuntimeException: All children of ConstraintLayout must have ids to use ConstraintSet
Run Code Online (Sandbox Code Playgroud)

使用时不会崩溃

implementation 'com.android.support.constraint:constraint-layout:1.0.2'
Run Code Online (Sandbox Code Playgroud)

它在 1.1.3 上崩溃:

implementation 'com.android.support.constraint:constraint-layout:1.1.3'
Run Code Online (Sandbox Code Playgroud)

解决方案?

Nit*_*ani 5

您面临的问题是因为com.android.support.constraint:constraint-layout:1.1.0有必要为每个视图提供 id,因为当通过 Java/Kotlin 代码执行 XML 部分时,尤其是克隆布局时,ConstraintSet可以进一步使用它来创建动态视图,可以轻松创建;如果没有给出其 id,则会给出或抛出一个异常(在克隆约束集时)作为您的,因为当重绘时ConstraintLayout(例如,当应用程序进入后台然后恢复时)会触发此异常(由于缺乏未给出 id 的视图的可访问性)。并且根据 Android 开发人员指南,您必须为每个视图提供唯一的 ID,才能正确访问该视图。

我希望这可以帮助你。