0

我有一个带有多个视图的 LinearLayout。所以我想要实现的是复制这个 LinearLayout 并在某个时候使用它。但是当我对原始 LinearLayout 执行更改时,例如 method removeAllViews(),它也在副本上完成。

例子:

Log.d("debug1","1 vc"+variableContent.getChildCount());
this.anticsModulsVisibles = variableContent; //copy of the linearLayout
Log.d("debug1","2 vc"+variableContent.getChildCount());
Log.d("debug1","2.1 amv"+anticsModulsVisibles.getChildCount());
variableContent.removeAllViews(); //i remove the content of the original
Log.d("debug1","3 vc"+variableContent.getChildCount());
Log.d("debug1","4 amv"+anticsModulsVisibles.getChildCount());

以及日志的输出:

1个VC2

2个VC2

2.1 amv2

3个VC0

4 amv0

如您所见,anticsModulsVisiblesoramv正在跟随原件发生的事情。

我可以避免这种情况吗?也许将其设置为“决赛”?是否可以?

谢谢。

4

1 回答 1

3

每当您看到一个对象的更改反映了您认为是副本的内容时,100% 的问题是您没有副本,而是对原始对象的第二个引用。您需要深入LinearLayout研究以确定该.clone()方法是否已完全实现,或者手动复制所有字段

于 2013-08-19T15:53:25.100 回答