【问题标题】:What is the difference between the different implementations of clone() in ConstraintSet?ConstraintSet中clone()的不同实现有什么区别?
【发布时间】:2017-09-03 16:33:11
【问题描述】:
根据docs for ConstraintSet,clone()方法有三种实现:
void clone(ConstraintLayout constraintLayout)
void clone(ConstraintSet set)
void clone(Context context, int constraintLayoutId)
文档中对每个版本的解释有点模糊,所以我并不完全清楚这三个版本之间的区别以及何时应该使用每个版本。我已经能够在需要时毫无问题地使用第一个。
【问题讨论】:
标签:
android
methods
android-constraintlayout
【解决方案1】:
ConstraintSet 包含这个私有字段:
private HashMap<Integer, ConstraintSet.Constraint> mConstraints;
三个clone() 方法中的每一个都将从此Map 中删除所有现有条目,然后根据您传入的内容将其重新填充。本质上,这些方法中的每一个都将转向任何ConstraintSet 实例您正在将它们调用到参数的副本中。
void clone(ConstraintSet set)
此版本清除 mConstraints 映射并使用传入的 ConstraintSet 内的约束重新填充它。
void clone(ConstraintLayout constraintLayout)
此版本清除了 mConstraints 映射,并使用任何必要的约束重新填充它,以生成传入的 ConstraintLayout 的副本。
void clone(Context context, int constraintLayoutId)
此版本使用传入的Context 和布局id 从布局资源中膨胀ConstraintLayout 实例,然后调用clone(ConstraintLayout)(上述方法)。