0

こんにちは、私は何かに行き詰まっています。オリエンテーションの変更中にフラグメントとアクティビティが処理される方法の概念を誤解していると思います。基本的に、アクティビティには 3 つのフラグメントがあり、フッターを介してフレームレイアウトを介して動的にロードされます。デフォルトでは、アプリの起動時に最初のフラグメントが表示されます。つまり、アクティビティが破棄されて作成されるたびに、最初のフラグメントが表示されます。今私が欲しいのは、異なるUIレイアウトで方向が変更された後に表示されるように、方向が変更される前の現在の可視フラグメントです。しかし、フラグメントなどを表示しようとすると、Null ビューが表示されます。

私のActivity onCreateにはこれがあります:

if(savedInstanceState != null){
            switchTag = savedInstanceState.getString(SAVED_CURRENT_FRAGMENT_STATE);
            Log.d(TAG, "fragment after orientation is " + switchTag);   
              displayCurrentFragment(switchTag);        

        }else {

             dashboardfragment = new DashBoardFragment();
              ft.add(R.id.dashboard_fragment_container_id, dashboardfragment, DASHBOARD_FRAG_TAG);
              ft.commit();
        }       

アクティビティで onSaveInstanceState と onConfigurationChanged をオーバーライドします。

@Override
public void onSaveInstanceState(Bundle outState) {

    Log.d(TAG, "OnSavedInstance() on dashboard activity");
    outState.putString(SAVED_CURRENT_FRAGMENT_STATE, switchTag);  // to save the current visible fragment

    super.onSaveInstanceState(outState);

}

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  setContentView(R.layout.dashboard_layout);  // same as oncreate
}

また、フラグメントの OnsaveInstanceState() もオーバーライドします。

だから私の質問

  1. これは、画面の向きでフラグメントとアクティビティを処理する正しい方法ですか?

  2. フラグメントで onsavedInstanceState をオーバーライドすると、アクティビティで呼び出される特定のメソッドは何ですか?

私の質問がいたるところにある場合は申し訳ありませんが、それは私を本当に混乱させています! 向きの変更でフラグメントの状態を保持する実際のプロセスは何ですか。ありがとうございました。

4

1 に答える 1

0

レイアウトのフラグメントに xml を使用していますか? 水平レイアウトと垂直レイアウトの両方のレイアウトにフラグメントが定義されていることを確認してください

于 2012-12-11T18:36:13.217 に答える