我正在尝试克隆ConstraintSet,如:
ConstraintLayout cl = findViewById(R.id.mainActivityParentCl);
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(cl);
它在克隆(cl)上崩溃,
Caused by: java.lang.RuntimeException: All children of ConstraintLayout must have ids to use ConstraintSet
使用
时不会崩溃implementation 'com.android.support.constraint:constraint-layout:1.0.2'
它在1.1.3崩溃:
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
解决方案?
答案 0 :(得分:1)
您面临的问题是,从com.android.support.constraint:constraint-layout:1.1.0
中必须给每个视图赋予id,因为当通过Java / Kotlin代码对XML进行处理时,尤其是当使用{复制布局时, {1}},可以进一步用于创建动态视图,该视图可以轻松创建;其ID(如果未给出)会像您一样抛出或引发异常(在克隆约束集时),因为重绘ConstraintSet
时(例如,当应用程序进入后台然后恢复时)异常被触发(由于缺乏视图的可访问性,未提供其ID)。而且,根据Android开发者指南,您还必须为每个视图提供唯一的ID,以使该视图具有适当的可访问性。
希望对您有所帮助。