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