2

フラグメントを保持するアクティビティがあり、そのフラグメントの何かがクリックされると、そのフラグメントを別のフラグメントに置き換えます。デバイスが 2 番目のフラグメントでローテーションさonCreateれると、 がアクティビティに対して呼び出され、最初のフラグメントが再度作成されます。

デバイスが回転したときに onCreate が呼び出されないようにするにはどうすればよいですか?

私のマニフェストにはこれがあります

<activity android:name="CalActivity" android:configChanges="orientation|keyboardHidden"/>

そのアクティビティにconfigChangesを追加すると、アクティビティが破棄されて再作成されるのを防ぐことができますが、onCreateは引き続き呼び出され、フラグメントを台無しにします。

setRetainInstance()フラグメントも入れてみましたが、どちらも役に立ちませんでした

デバイスが回転しない場合、フラグメントは本来のように機能し、これを 1 つの方向のみのアクティビティにしたくありません。実際に問題を解決するよりもハックです。

他に何ができますか?

編集:

これが私のフラグメントの作成方法です

Fragment miniMonthFrag = new MonthByWeekFragment(System.currentTimeMillis(), false);
ft.replace(R.id.cal_frame, miniMonthFrag).commit();
4

1 に答える 1

6

replace を使用する代わりに:

 FragmentManager fm = getFragmentManager();
    if (fm.findFragmentById(R.id.cal_frame) == null) {
        mFragment = new MonthByWeekFragment(System.currentTimeMillis(), false);
        fm.beginTransaction().add(R.id.cal_frame, mFragment ).commit();
    } else {
        mFragment = (MonthByWeekFragment) fm.findFragmentById(R.id.cal_frame);
    }

これにより、回転後に既存のフラグメントを確実に使用できます。

于 2013-02-07T17:55:27.627 に答える