从外部片段中的FragmentTabHost的子片段添加新的选项菜单

Kyaw Min Thu L

当我为应用程序使用一些嵌套片段时,应用程序的子片段无法通过重写onCreateOptionsMenu(Menu menu,MenuInflater menuInflater)方法来添加新的选项菜单(切勿点击此方法)。

应用程序的类层次如下。

MainActivity.java(扩展SherlockFragmentActivity)(MainActivity包含以下子片段)

  1. Fragment1.java(扩展了SherlockFragment)

  2. 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)方法。

Kyaw Min Thu L

现在,我可以调用子片段的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与FragmentTabHost中的片段通信

来自分类Dev

FragmentPagerAdapter中的片段选项菜单

来自分类Dev

FragmentPagerAdapter中的片段选项菜单

来自分类Dev

从片段中访问“选项”菜单?安卓

来自分类Dev

如何在片段中添加菜单?

来自分类Dev

我如何添加选项菜单以从NavigationView片段

来自分类Dev

引用子片段中的片段

来自分类Dev

片段菜单中的活动

来自分类Dev

片段中不可点击的选项菜单项

来自分类Dev

子片段无法使菜单膨胀

来自分类Dev

当我们将它们添加到片段和主要活动中时,选项菜单的流程如何?

来自分类Dev

将菜单添加到活动中而不是片段

来自分类Dev

在片段中添加SearchView

来自分类Dev

在选项卡式活动中添加和替换片段

来自分类Dev

每个片段的自定义选项菜单

来自分类Dev

在FragmentTabhost中,片段无法达到由beginTransaction()调用的目的。

来自分类Dev

片段中未显示的菜单

来自分类Dev

使用添加子菜单中的外部链接

来自分类Dev

片段的菜单项被多次添加

来自分类Dev

如何向片段添加actionbarsherlock菜单

来自分类Dev

在片段中添加onOptionsItemSelected调用

来自分类Dev

在片段中添加动态视图

来自分类Dev

在 webview 片段中添加滑动

来自分类Dev

在片段中添加浮动按钮

来自分类Dev

动态更改片段选项卡主机中的片段?

来自分类Dev

动态更改片段选项卡主机中的片段?

来自分类Dev

在片段“致命异常”中单击。片段的共享首选项

来自分类Dev

片段中的选项卡布局(不会显示片段)

来自分类Dev

创建新活动时无法添加片段