1

Android Fragment を使用してプロジェクトを作成する必要があります。フラグメントを 2 回目に表示しようとすると、次の例外が発生します。

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

この非常に明示的な例外に関する多くのトピックを見つけましたが、私のプロジェクトの解決策は見つかりませんでした。これは私のフラグメントのコードです:

public class MyFragement extends Fragment {

    private View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        if (view == null) {
            view = inflater.inflate(R.layout.mylayout, container, false);
        } else {
            ViewGroup parent = (ViewGroup) view.getParent();
            if (parent != null) {
                parent.removeView(view);
            }
        }
        return view;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();

        if (view != null) {
            ViewGroup parentViewGroup = (ViewGroup) view.getParent();

            if (parentViewGroup != null) {
                parentViewGroup.removeView(view);
            }
        }

    }
    ....
}

この線

view = inflater.inflate(R.layout.mylayout, container, false); 

2 回目の実行時に例外をスローします。例外が示唆しているように、ビューが破棄されたときに親からビューを削除しますが、問題は解決しません。

XML ファイル (layout/mylayout.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FBF3E7"
    android:padding="5dp" >

    <ListView
        android:id="@+id/menu_item_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:choiceMode="none" >
    </ListView>

</LinearLayout>

誰かがこの問題を解決するアイデアを持っていますか?

4

1 に答える 1

0

これを試して...

public class MyFragement extends Fragment {

private View view;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    view = inflater.inflate(R.id.mylayout, container, false);   
    return view;
}

@Override
public void onDestroyView() {
    super.onDestroyView();
}
....

}

于 2013-10-30T10:46:03.413 に答える