您好我需要通过复制和粘贴ViewGroup来获取ViewGroup的副本,但不能获得完全相同的位置。所以我试着这样做,这就是结果:
public void ViewGroupCopy(ViewGroup source,int sourceOffset,ViewGroup destination,int destinationOffset){
for(int i=sourceOffset;i<source.getChildCount();i++){
View view = source.getChildAt(i);
source.removeView(view);
destination.addView(view, destinationOffset+i, view.getLayoutParams());
}
我在这段代码中使用了这个方法:
Activity host = (Activity) this.getContext();
View contentView = host.findViewById(android.R.id.content).getRootView();
ViewGroup children = (ViewGroup) contentView;
ViewGroup oldChildren = (ViewGroup) contentView;
children.removeAllViews();
children.addView(new Preview(context));
ViewGroupCopy(oldChildren,0,children,1);
有关您的其他信息,此类扩展了一个视图。
当我尝试使用它时,我在LogCat中得到了这个。
09-08 16:34:30.212:E / AndroidRuntime(10992):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.worknwalk / com.example.worknwalk.Text}:java.lang。 IndexOutOfBoundsException:index = 1 count = 0
有人可以帮帮我吗?感谢。
答案 0 :(得分:0)
尝试使用相同的索引从源组获取视图。每次从源中删除视图时,您都将在该索引处获得新视图。此外,当sourceOffset&gt;时,destinationOffset + i可能存在错误。 0.这里可能没有错误,但是当你例如将索引为10的项目添加到包含6个项目的列表时,我并不完全确定行为。它可能会也可能不会崩溃。无论如何,试试这个:
public void ViewGroupCopy(ViewGroup source, int sourceOffset,
ViewGroup destination, int destinationOffset) {
int limit = source.getChildCount() - sourceOffset;
for (int i = 0; i < limit; i++) {
View view = source.getChildAt(sourceOffset);
source.removeView(view);
destination.addView(view, destinationOffset + i,
view.getLayoutParams());
}
}