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 に答える