我最近开始更新我的应用程序以使用 Android 5.0 中引入的新工具栏组件,以支持在操作栏上使用自定义视图。我按照这里的指南:http: //antonioleiva.com/material-design-everywhere/并添加工具栏工作正常。问题是,我正在使用一个导航结构,其中有一个 MainActivity 并通过将 Fragments 添加到后台堆栈来替换内容。我在我的 Fragments 中覆盖 onCreateOptionsMenu 和 onOptionsItemSelected 方法来设置工具栏中的菜单项,并且当我切换 Fragments 并且在第一个 Fragment 上调用 onOptionsItemSelected 时图标会相应更改,但是当我将 Fragment 添加到后台。MainActivity 中的 onOptionsItemSelected 函数甚至没有被调用,因此该事件没有被 Activity 消耗。我也尝试过仅替换 Fragment 而不将其添加到后台堆栈,但仍然没有调用 onOptionsItemSelected。更改内容片段后,要调用 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>
在 MainActivity 中添加工具栏:
Toolbar toolbar = (Toolbar)findViewById( R.id.toolbar );
if (toolbar != null) {
setSupportActionBar( toolbar );
getSupportActionBar().setDisplayHomeAsUpEnabled( true );
toolbar.setNavigationIcon( R.drawable.toolbar_icon_menu );
}
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 );
}
顶级片段菜单功能:
@Override
public void onCreateOptionsMenu( Menu menu, MenuInflater inflater ) {
super.onCreateOptionsMenu( menu, inflater );
inflater.inflate( R.menu.main_looks, menu );
}
@Override
public boolean onOptionsItemSelected( MenuItem item ) {
switch (item.getItemId()) {
case R.id.miOptions:
onOptions();
return true;
default:
return super.onOptionsItemSelected( item );
}
}
后台片段中的菜单功能
@Override
public void onCreateOptionsMenu( Menu menu, MenuInflater inflater ) {
super.onCreateOptionsMenu( menu, inflater );
inflater.inflate( R.menu.user, menu );
}
@Override
public boolean onOptionsItemSelected( MenuItem item ) {
Log.v( "User", "onOptionsItemSelected" );
switch (item.getItemId()) {
case R.id.miUserShare:
onShareUser();
return true;
case R.id.miUserEdit:
onEditUserProfile();
return true;
default:
return super.onOptionsItemSelected( item );
}
}