私のアプリでは、SherlockFragmentActivityを拡張するクラスを持っています。そのアクティビティ内で、 ActionbarSherlockとPagerSlidingTabStripの助けを借りて、タブのふりをするSherlockFragmentを拡張する 4 つのクラスをロードしています。
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)です。