【问题标题】:onOptionsItemSelected not being called from fragment master detail view未从片段主详细信息视图调用 onOptionsItemSelected
【发布时间】:2013-07-26 12:15:09
【问题描述】:

我有一个主细节视图,主片段和细节片段都有自己的操作栏菜单项; master有一些,detail有一些,但是details action bar item点击时不调用onOptionsItemSelected。这个问题出在平板电脑上。

另一方面,如果在手机模拟器上运行相同的代码,则详细视图的操作栏项可以正常工作。

menu.xml

<item
    android:id="@+id/save_menu"
    android:icon="@drawable/ic_checkmark_holo_light"
    android:showAsAction="always|withText"
    android:title="Save">
</item>
<item
    android:id="@+id/cancel_menu"
    android:icon="@drawable/ic_menu_close_clear_cancel"
    android:showAsAction="always|withText"
    android:title="Cancel">
</item>

inflater 工作正常,主细节视图中的两个片段在其onCreate 方法中都有setHasOptionsMenu(true);

编辑

片段活动中的onCreateOptionsMenu

   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    return super.onCreateOptionsMenu(menu);
}

onCreateOptionsMenu 在主片段中

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.itemlistactivity_menu, menu);
}

onCreateOptionsMenu 在详细信息片段中

 @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.addfragment_menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
    System.out.println("onCreateOptionsMenu called");
}

【问题讨论】:

  • 你是否覆盖了 FragmentActivity 中的 onCreateOptionsMenu 方法?
  • @AdriánRodríguez 更新了问题,就是片段活动中的 onCreateOptionsMenu
  • 这就是问题所在,我想。你必须告诉加载什么菜单。试试这个:@Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.menu, menu);返回真; }
  • 这样做是给细节片段操作栏项目两次。我有一个包含主从视图的活动。主片段有自己的一组动作栏项目,而详细视图有自己的一组动作栏项目。主片段的菜单项正常工作,但详细片段上的菜单项没有调用onCreateOptionsMenu
  • @AdriánRodríguez 用两个片段的onCreateOptionsMenu 更新了问题

标签: android menu android-fragments actionbarsherlock


【解决方案1】:

我从this 链接获得了解决方案。

它说我们可以通过不拦截Fragment Activity(Fragment的Parent Activity)中的相同事件来实现我们想要的行为。

此链接显示了两种方法,但是我通过在 FragmentActivity 中使用以下方法来完成我的工作

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        return false;
    }

试试看。

【讨论】:

    猜你喜欢
    • 2019-01-06
    • 2014-07-23
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多