2017-08-16 5 views
0

フラグメントをバックスタックに追加すると、オプションメニューのクリックが機能しません。最初のフラグメントオプション項目のクリックが有効になります。onOptionsItemSelectedフラグメントのバックスタックでは機能しません

フラグメントBackstackのコードあなたのフラグメントのonCreate(中

public void setFragment(Fragment fragment, int title_res) { 
    String backStateName = fragment.getClass().getName(); 
    FragmentManager manager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = manager.beginTransaction(); 
    if (editable_mode) { 
     boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0); 
     Log.e("fragmentPopped", fragmentPopped + ""); 
     if (fragmentPopped) { 
      fragmentTransaction.remove(fragment); 
     } 
     fragmentTransaction.add(R.id.view_container, fragment); 
     fragmentTransaction.addToBackStack(backStateName); 
     fragmentTransaction.commit(); 
    } else { 
     boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0); 
     Log.e("fragmentPopped", fragmentPopped + ""); 
     if (!fragmentPopped) { //fragment not in back stack, create it. 
      fragmentTransaction.add(R.id.view_container, fragment); 
      fragmentTransaction.commit(); 
     } 
    } 

    getSupportActionBar().setTitle(title_res); 
} 
+0

フラグメントまたはベースアクティビティクラスの内部にオプションメニューを設定していますか? – hsm59

+0

ベースアクティビティ –

答えて

1

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
} 

が更新次の行を追加します。あなたは、ベースの活動から、あなたのメニューを追加する場合は、このコードを追加し、

あなたのフラグメントonResume()にコピーし、onCreate()からsetHasOptionsMenu(true)を削除します。

@Override 
    public void onResume() { 
     super.onResume(); 
     ActivityCompat.invalidateOptionsMenu(getActivity()); 
    } 
+0

既に追加されています..この行.. –

+0

私は私のansを編集しました。それを試してみてください –

関連する問題