1

良い一日を。簡単な質問です。フッターを介して複数のフラグメントを保持する単一のアクティビティの場合、これはフラグメント間の切り替えを実装する正しい方法ですか? このコードはすべてのフラグメントに存在します

プライベートボイドshowMyFragment(){

  FragmentTransaction ft = fragmanager.beginTransaction();

  if(fragmanager.findFragmentByTag(MY_FRAG_TAG) != null){ //different Tag for different fragment

     ft.replace(R.id.dashboard_fragment_container_id, myfragment, MY_FRAG_TAG);  //NUllPointerException sometimes here
     ft.commit();
    }

  else {

      myfragment = new MyFragment();

          ft.replace(R.id.dashboard_fragment_container_id, myfragment, MY_FRAG_TAG);                     
      ft.addToBackStack(null);
      ft.commit();
  } 
}

スタック トレースは次のとおりです。

01-23 15:07:20.432: E/AndroidRuntime(30834): FATAL EXCEPTION: main
01-23 15:07:20.432: E/AndroidRuntime(30834): java.lang.NullPointerException
01-23 15:07:20.432: E/AndroidRuntime(30834):    at android.support.v4.app.BackStackRecord.doAddOp(Unknown Source)
01-23 15:07:20.432: E/AndroidRuntime(30834):    at android.support.v4.app.BackStackRecord.replace(Unknown Source)
01-23 15:07:20.432: E/AndroidRuntime(30834):    at com.company.example.DashBoardActivity.showComparisonDashboard(DashBoardActivity.java:431)
01-23 15:07:20.432: E/AndroidRuntime(30834):    at com.company.example.DashBoardActivity.onClick(DashBoardActivity.java:359)
01-23 15:07:20.432: E/AndroidRuntime(30834):    at android.view.View.performClick(View.java:2533)

このコードが、フラグメントを保持するすべてのメソッドに存在すると仮定します。たとえば、MyFragment1 の showMyFragment1()、MyFragment2 の showMyFragment2() などです。また、フラグメントごとに異なるタグがあります。これは、単一のアクティビティ フッター内のフラグメントを切り替える良い方法ですか、それともよりクリーンな方法がありますか。上記のコメント行で NullPointerException が発生することがあります。切り替え時に何が間違っているのかわかりません。ありがとうございました。

更新は、向きの変更後に問題が発生することに気付きました。私のフラグメントの 1 つだけが方向を変更できます。他のものは縦向きにロックされています。したがって、特権で方向の変更が発生し、フラグメントを切り替えると、問題が発生します。

4

0 に答える 0