我在使用片段为平板电脑和智能手机开发应用时遇到了问题。
当在智能手机上执行app时,我会显示一个带有列表(类别)的片段。当点击一个项目时,我开始一个新的活动,该活动包含一个ViewPager,它用另一个列表(细节)来扩展Fragments。
当在平板电脑上执行app时,我的内部有两个片段。左边是类别列表,右边是详细列表。
到目前为止没有问题,但是在设置onOptionsItemSelected时我遇到了问题。
在智能手机上执行应用程序时,一切正常。这有效:
包含ViewPager的活动
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.icShare:
sharePortal();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
ViewPager虚张声势的片段
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.icFavourite:
Utils.setFavouritePortal(mContext, mPortal);
getActivity().invalidateOptionsMenu();
return true;
case R.id.icShowFavourites:
showFavouriteArticles();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
但是在平板电脑上执行应用程序时,不会调用onOptionsItemSelected。这是代码:
包含ViewPager的片段
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.icShowFavourites:
Log.e("asdf", "asdfasdf - test tablet");
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
ViewPager虚张声势的片段
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.icFavourite:
Utils.setFavouritePortal(mContext, mPortal);
getActivity().invalidateOptionsMenu();
return true;
case R.id.icShowFavourites:
showFavouriteArticles();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
唯一的区别是,在智能手机上执行时,第一个onOptionsItemSelected由一个Activity保持,而tabled由一个片段保存。我还尝试从Activity中执行onOptionsItemSelected,其中包含包含ViewPager的片段,这些片段没有运气。
我怎样才能让它发挥作用?
提前谢谢!
答案 0 :(得分:2)
尝试将setHasOptionsMenu(true);
放入要调用onOptionsItemSelected()
的片段中。
答案 1 :(得分:0)
该片段应调用setHasOptionsMenu(true)
,并应实施onCreateOptionsMenu()
和onOptionsItemSelected()
。