【发布时间】:2013-11-19 09:30:30
【问题描述】:
在我的应用程序中,我有一个扩展 SherlockFragmentActivity 的类。在那个 Activity 中,我加载了四个类,它们扩展了 SherlockFragment,在 ActionbarSherlock 的帮助下伪装成 Tabs和 PagerSlidingTabStrip。
扩展SherlockFragment的类有setHasOptionsMenu(true);在onCreate() 方法。即使这样,在运行应用程序时,它也不会调用 onCreateOptionsMenu() 方法。
我在 SO 中阅读了这些类似的问题(Q1、Q2),但没有得到任何帮助。
这可能是什么原因?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.record, menu);
super.onCreateOptionsMenu(menu, inflater);
Log.i(TAG, "* onCreateOptionsMenu");
}
更新:
我认为原因是,我在另一个 SherlockFragment 中使用了 SherlockFragment。 PageSlidingTabStripFragment.java 中的意思是在 MyPagerAdapter 类中有以下方法。
@Override
public SherlockFragment getItem(int position) {
return SuperAwesomeCardFragment.newInstance(position);
}
我正在做的是,我正在从那里调用其他一些 SherlockFragments,如下所示。
@Override
public SherlockFragment getItem(int position) {
Log.i(TAG, "* getItem");
switch (position) {
case 0:
return new InnerSherlockFragmentOne();
case 1:
return new InnerSherlockFragmentTwo();
case 2:
return new InnerSherlockFragmentThree();
case 3:
return new InnerSherlockFragmentFour();
default:
return null;
}
}
没有调用的是那些 InnerSherLockFragments 中的 onCreateOptionsMenu(Menu menu, MenuInflater inflater)。
【问题讨论】:
-
也许你在膨胀菜单之前忘了加
menu.clear()。 -
@Naddy 不...我告诉
onCreateOptionsMenu()甚至不打电话。如果我将Log消息作为第一行放在该方法中,则不会打印。 -
@Naddy 已添加到问题中
-
我已经实现了相同的代码,它对我有用。唯一的区别是我以编程方式创建了 MenuItems。你在使用 MapFragment??
-
@Naddy 我没有使用 MapFragment。我也可以通过编程方式创建
MenuItems。但是要以编程方式创建MenuItems,我们需要在Fragment 中触发onCreateOptionsMenu()。那是我没有发生的地方。您可能在SherlockFragmentActivity中实现了MenuItems而不是SherlockFragment或者您可能没有为不同的片段创建不同的MenuItems。顺便说一句,感谢您分享您的经验。
标签: android android-fragments actionbarsherlock oncreateoptionsmenu pagerslidingtabstrip