【发布时间】:2013-03-09 10:35:24
【问题描述】:
我的问题是当我单击操作栏项目时 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 中,当我们处于双窗格模式时,ready 为 true,因此在使用平板电脑时,或者如果我们在第一个片段中(所以第二个为空)。
如果我按下后退按钮一切正常,片段将被替换。 但是,当我单击操作栏中的后退按钮时,它只会返回到上一个活动。
即使我更改了 getActivity().onBackPressed(); onBackPressed 的 else 语句我不起作用。
有谁知道解决方法是什么,我做错了什么?
【问题讨论】:
-
但是当我点击操作栏中的后退按钮时,它只是返回到上一个活动。 - 这应该是默认行为。你认为应该怎么做?
-
onbackpressed的else语句,所以替换fragment
-
没关系,我找到了解决方案 :)
标签: android android-fragments android-actionbar actionbarsherlock android-fragmentactivity