在我的应用程序中,我有一个扩展 SherlockFragmentActivity 的类。在该 Activity 中,我正在加载四个扩展 SherlockFragment 的类,它在 ActionbarSherlock 的帮助下伪装成 Tabs和 PagerSlidingTabStrip。
扩展 SherlockFragment 的类在 onCreate() 中有 setHasOptionsMenu(true);/strong> 方法。即使有,当运行应用程序时,它也不会调用 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)。
最佳答案
导入应该是:
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
而不是 android 操作系统的这些!
也可以尝试调用 super
方法,例如:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.record, menu);
Log.i(TAG, "* onCreateOptionsMenu");
}
关于android - SherlockFragment onCreateOptionsMenu 没有调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20067762/