私の問題は、アクション バー アイテムをクリックしたときに onOptionsItemSelected が呼び出されたが機能していないことです。
戻るボタンだけを機能させたい。これが私のコードです。これは SherlockFragment ファイルにあります。
actionbar = getSherlockActivity().getSupportActionBar();
actionbar.setDisplayHomeAsUpEnabled(true);
@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
inflater.inflate(R.menu.menu_detail, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.detailitem1:
break;
case android.R.id.home:
getActivity().onBackPressed();
break;
default:
return super.onOptionsItemSelected(item);
}
return false;
}
メニュー項目は com.actionbarsherlock.view.MenuItem です。setHasOptionsMenu(true); を追加しました。onCreateで、onCreateViewも試しました。
onBackPressed はこれで、SherlockFragmentActivity にあります。
@Override
public void onBackPressed() {
Saved = SP.getBoolean("saved", false);
if ((getSupportFragmentManager().findFragmentByTag("detail") == null)
| mTwoPane) {
ready = true;
} else
ready = false;
if (!Saved && ready) {
new AlertDialog.Builder(this)
.....
}else if (Saved && ready){
super.onBackPressed();
}else {
someListFragment Fragment = new someListFragment ();
Fragment .setArguments(getIntent().getExtras());
Fragment .setHasOptionsMenu(true);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, Fragment, "listview")
.commit();
}
}
onbackpressed では、2 ペイン モードの場合、つまりタブレットを使用している場合、または最初のフラグメントにいる場合 (つまり 2 番目のフラグメントが null の場合) は、ready は true です。
戻るボタンを押すと、すべて正常に動作し、フラグメントが置き換えられます。しかし、アクション バーの [戻る] ボタンをクリックすると、前のアクティビティに戻ります。
getActivity().onBackPressed(); を変更しても onBackPressed の else ステートメントが機能しません。
誰かが解決策を知っていますか、私が間違っていたことは何ですか?