0

嗨,我需要通过复制和粘贴 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: 索引=1 计数=0

有人可以帮我吗?谢谢。

4

1 回答 1

0

尝试使用相同的索引从源组获取视图。每次从源中删除视图时,您都会在该索引处获得一个新视图。当 sourceOffset > 0 时,destinationOffset+i 也可能存在错误。这里可能没有错误,但我不完全确定当您将索引为 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());
    }
}
于 2012-09-08T11:16:07.880 回答