小编sve*_*ven的帖子

Android工具栏未从Backstack上的片段调用onOptionsItemSelected

我最近开始更新我的应用程序以使用Android 5.0中引入的新工具栏组件,转而使用操作栏上的自定义视图.我按照这里的指南:http: //antonioleiva.com/material-design-everywhere/并添加工具栏工作正常.问题是,我正在使用导航结构,我有一个MainActivity,并通过将碎片添加到backstack来替换内容.我正在覆盖片段中的onCreateOptionsMenu和onOptionsItemSelected方法来设置工具栏中的菜单项,当我切换片段时图标会相应更改,并且在第一个片段上调用onOptionsItemSelected,但是当我将片段添加到片段时不调用堆栈中.甚至没有调用MainActivity中的onOptionsItemSelected函数,因此Activity不会使用该事件.我还尝试过更换片段而不将其添加到backstack,但仍未调用onOptionsItemSelected.一旦我更改内容Fragment,我有什么错过得到onOptionsItemSelected来调用?相关代码发布在下面.

应用主题:

<style name="AppThemeLight" parent="@style/Theme.AppCompat.Light">
    <item name="actionMenuTextColor">@color/white</item>
    <item name="android:windowDisablePreview">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowActionBar">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在MainActivity中添加工具栏:

Toolbar toolbar = (Toolbar)findViewById( R.id.toolbar );
if (toolbar != null) {
    setSupportActionBar( toolbar );
    getSupportActionBar().setDisplayHomeAsUpEnabled( true );
    toolbar.setNavigationIcon( R.drawable.toolbar_icon_menu );
}
Run Code Online (Sandbox Code Playgroud)

MainActivity中的菜单功能:

@Override
public boolean onCreateOptionsMenu( Menu menu ) {
    Log.v( "Main", "onCreateOptionsMenu" );
    return super.onCreateOptionsMenu( menu );
}

@Override
public boolean onOptionsItemSelected( MenuItem item ) {
    Log.v( "Main", "onOptionsItemSelected" );
    return super.onOptionsItemSelected( item );
}
Run Code Online (Sandbox Code Playgroud)

顶级片段菜单功能:

@Override …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-toolbar

7
推荐指数
1
解决办法
8680
查看次数