Навигация с помощью sherlockactionbar во фрагментах не работает

моя проблема в том, что когда я нажимаю на элемент панели действий, 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 готовность имеет значение true, когда мы находимся в двухпанельном режиме, поэтому при использовании планшета или если мы находимся в первом фрагменте (поэтому второй имеет значение null).

Если я нажму кнопку «Назад», все работает нормально, фрагменты заменяются. Но когда я нажимаю кнопку «Назад» на панели действий, он просто возвращается к предыдущему действию.

Даже если я изменю getActivity().onBackPressed(); Оператор else onBackPressed не работает.

Кто-нибудь знает, что решение, что я сделал неправильно?


comment
Но когда я нажимаю кнопку "Назад" на панели действий, он просто возвращается к предыдущему действию. - это должно быть поведением по умолчанию. Что должно произойти на ваш взгляд?   -  person user    schedule 09.03.2013
comment
Оператор else onbackpressed, поэтому замените фрагмент   -  person executioner    schedule 09.03.2013
comment
Неважно, я нашел решение :)   -  person executioner    schedule 09.03.2013


Ответы (1)


Извините, я был немного ленив, я забыл, что у меня был onOptionsItemSelected в моей FragmantActivity, а кнопка «Назад» всегда была android.R.id.home, поэтому я поместил туда оператор if и вуаля.

person executioner    schedule 09.03.2013