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

Android工具栏未从Backstack上的片段调用onOptionsItemSelected,第1张

概述我最近开始更新我的应用程序以使用 Android 5.0中引入的新工具栏组件,转而使用 *** 作栏上的自定义视图.我按照指南在这里: http://antonioleiva.com/material-design-everywhere/并添加工具栏工作正常.问题是,我正在使用导航结构,我有一个MainActivity,并通过将碎片添加到backstack来替换内容.我正在覆盖片段中的onCreateOp 我最近开始更新我的应用程序以使用 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>

在MainActivity中添加工具栏:

Toolbar toolbar = (Toolbar)findVIEwByID( R.ID.toolbar );if (toolbar != null) {    setSupportActionbar( toolbar );    getSupportActionbar().setdisplayHomeAsUpEnabled( true );    toolbar.setNavigationIcon( R.drawable.toolbar_icon_menu );}

MainActivity中的菜单功能:

@OverrIDepublic boolean onCreateOptionsMenu( Menu menu ) {    Log.v( "Main","onCreateOptionsMenu" );    return super.onCreateOptionsMenu( menu );}@OverrIDepublic boolean onoptionsItemSelected( MenuItem item ) {    Log.v( "Main","onoptionsItemSelected" );    return super.onoptionsItemSelected( item );}

顶级片段菜单功能:

@OverrIDepublic voID onCreateOptionsMenu( Menu menu,MenuInflater inflater ) {    super.onCreateOptionsMenu( menu,inflater );    inflater.inflate( R.menu.main_looks,menu );}@OverrIDepublic boolean onoptionsItemSelected( MenuItem item ) {    switch (item.getItemID()) {        case R.ID.miOptions:            onoptions();            return true;        default:            return super.onoptionsItemSelected( item );    }}

在Backstack上的Fragment中的菜单功能

@OverrIDepublic voID onCreateOptionsMenu( Menu menu,inflater );    inflater.inflate( R.menu.user,menu );}@OverrIDepublic 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 );    }}
解决方法 在更改其他片段时注意到问题,并注意到使用更简单的布局从片段调用onoptionsItemSelected.事实证明,出于某种原因 将ScrollVIEw作为Fragment布局的顶级组件会干扰接收触摸事件的工具栏.通过将ScrollVIEw包装在额外的relativeLayout中(任何容器布局都可能有效),可以调用onoptionsItemSelected.我猜这与工具栏组件现在是视图层次结构的一部分有关 – 无法想到为什么为ScrollVIEw添加包装器可以解决问题.如果有人能帮助解释这种奇怪的行为,我们将不胜感激. 总结

以上是内存溢出为你收集整理的Android工具栏未从Backstack上的片段调用onOptionsItemSelected全部内容,希望文章能够帮你解决Android工具栏未从Backstack上的片段调用onOptionsItemSelected所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1145337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存