当我为应用程序使用一些嵌套片段时,应用程序的子片段无法通过重写onCreateOptionsMenu(Menu menu,MenuInflater menuInflater)方法来添加新的选项菜单(切勿点击此方法)。
应用程序的类层次如下。
MainActivity.java(扩展SherlockFragmentActivity)(MainActivity包含以下子片段)
Fragment1.java(扩展了SherlockFragment)
Fragment2.java(扩展了SherlockFragment)
(Fragment2包含用于添加以下子片段的FragmentTabHost)
i. ChildFragment1.java(extends SherlockFragment)
ii. ChildFragment2.java(extends SherlockFragment)
iii. ChildFragment3.java(extends SherlockFragment)
我可以通过在onCreate(Bundle savedInstanceState)中添加setHasOptionsMenu(true)并覆盖onCreateOptionsMenu(Menu menu,MenuInflater menuInflater)在Fragment1,Fragment2中添加新的OptionMenu
但是我不能在ChildFragment1,ChildFragment2,ChildFragment3中添加新的OptionMenu,因为永远不会调用子片段类的onCreateOptionsMenu(Menu menu,MenuInflater menuInflater)方法。
现在,我可以调用子片段的onCreateOptionsMenu,也可以通过以下代码调用onOptionsItemSelected。
Fragment2.java
protected FragmentTabHost mTabHost;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
super.onCreateOptionsMenu(menu, menuInflater);
Fragment currentFragment = getChildFragmentManager().findFragmentByTag(mTabHost.getCurrentTabTag());
if (currentFragment != null && currentFragment instanceof BaseTabsPagerChildFragment)
((BaseTabsPagerChildFragment) currentFragment).inflateOptionsMenu(menu, menuInflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (super.onOptionsItemSelected(item)) {
return true;
} else {
Fragment currentFragment = getChildFragmentManager().findFragmentByTag(mTabHost.getCurrentTabTag());
if (currentFragment != null && currentFragment instanceof BaseTabsPagerChildFragment) {
return ((BaseTabsPagerChildFragment) currentFragment).onOptionsItemSelected(item);
}
}
return false;
}
BaseTabsPagerChildFragment.java
abstract class BaseTabsPagerChildFragment extends BaseSherlockFragment {
public abstract void inflateOptionsMenu(Menu menu, MenuInflater menuInflater);
}
ChildFragment1.java(扩展BaseTabsPagerChildFragment.java)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
};
@Override
public void inflateOptionsMenu(Menu menu, MenuInflater menuInflater) {
onCreateOptionsMenu(menu, menuInflater);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
super.onCreateOptionsMenu(menu, menuInflater);
menuInflater.inflate(R.menu.message_actionbar_menu, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean handled = super.onOptionsItemSelected(item);
if (handled) {
return true;
}
int itemId_ = item.getItemId();
if (itemId_ == R.id.menu_item_compose) {
launchCompose();
return true;
}
if (itemId_ == R.id.menu_item_delete) {
doDelete();
return true;
}
return false;
}
谢谢。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句