0

私の問題は、アクション バー アイテムをクリックしたときに 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 ステートメントが機能しません。

誰かが解決策を知っていますか、私が間違っていたことは何ですか?

4

1 に答える 1

0

FragmantActivity に onOptionsItemSelected があり、戻るボタンが android.R.id.home であることを忘れていたので、そこに if ステートメントを入れて出来上がりです。

于 2013-03-09T11:28:42.587 に答える