未显示子菜单后的可选菜单项

时间:2013-05-18 05:59:21

标签: android android-actionbar android-menu

我在ActionBar上遇到一个奇怪的问题,我正在ListActivity上设置。

以下是我用来设置菜单的XML:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item 
   android:id="@+id/menu_search"
   android:title="@string/search_filter"
   android:icon="@drawable/ic_search"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_start_date"
   android:title="@string/date_filter"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_end_date"
   android:title="@string/date_filter"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_filters"
   android:title="@string/filters"
   android:icon="@drawable/ic_filter"
   android:showAsAction="always|withText">

  <menu>
        <item 
            android:id="@+id/menu_ratings"
            android:title="@string/ratings"
            android:icon="@drawable/ic_star"
            android:showAsAction="always|withText" />
        <item 
            android:id="@+id/menu_emotions"
            android:title="@string/emotions"
            android:icon="@drawable/ic_smi2"
            android:showAsAction="always|withText" />
        <item 
            android:id="@+id/menu_categories"
            android:title="@string/categories"
            android:icon="@drawable/ic_folder"
            android:showAsAction="always|withText" />
 </menu>

 <item 
   android:id="@+id/menu_search_order"
   android:title="@string/search_order"    
   android:icon="@drawable/ic_search_order"
   android:showAsAction="ifRoom|withText" />     
</item>

</menu>

菜单项menu_searchmenu_start_datemenu_end_date和子菜单menu_filters效果很好但无法从物理菜单中获取菜单menu_search_order菜单按钮(按下按钮时没有任何反应)。

所以我做了一点测试,看看问题是不是来自子菜单,我更改了代码并注释了子菜单部分:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item 
   android:id="@+id/menu_search"
   android:title="@string/search_filter"
   android:icon="@drawable/ic_search"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_start_date"
   android:title="@string/date_filter"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_end_date"
   android:title="@string/date_filter"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_filters"
   android:title="@string/filters"
   android:icon="@drawable/ic_filter"
   android:showAsAction="always|withText">

  <!-- <menu>
        <item 
            android:id="@+id/menu_ratings"
            android:title="@string/ratings"
            android:icon="@drawable/ic_star"
            android:showAsAction="always|withText" />
        <item 
            android:id="@+id/menu_emotions"
            android:title="@string/emotions"
            android:icon="@drawable/ic_smi2"
            android:showAsAction="always|withText" />
        <item 
            android:id="@+id/menu_categories"
            android:title="@string/categories"
            android:icon="@drawable/ic_folder"
            android:showAsAction="always|withText" />
 </menu> -->

 <item 
   android:id="@+id/menu_search_order"
   android:title="@string/search_order"    
   android:icon="@drawable/ic_search_order"
   android:showAsAction="ifRoom|withText" />     
</item>

</menu>

更改后,菜单运行正常,按下物理菜单按钮时会显示该选项。

所以我的问题是:为什么子菜单会阻止我的最后一个菜单出现在第一个案例中?

谢谢!

2 个答案:

答案 0 :(得分:1)

我仍然不知道为什么我的问题中的代码不起作用,但我找到了最终使其工作的诀窍。

我刚刚在XML文件中的子菜单之前移动了我的可选菜单(最初位于底部):

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item 
   android:id="@+id/menu_search"
   android:title="@string/search_filter"
   android:icon="@drawable/ic_search"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_start_date"
   android:title="@string/date_filter"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_end_date"
   android:title="@string/date_filter"
   android:showAsAction="always|withText" />

<item 
   android:id="@+id/menu_search_order"
   android:title="@string/search_order"    
   android:icon="@drawable/ic_search_order"
   android:showAsAction="ifRoom|withText" />

<item 
   android:id="@+id/menu_filters"
   android:title="@string/filters"
   android:icon="@drawable/ic_filter"
   android:showAsAction="always|withText">

<menu>
        <item 
            android:id="@+id/menu_ratings"
            android:title="@string/ratings"
            android:icon="@drawable/ic_star"
            android:showAsAction="always|withText" />
        <item 
            android:id="@+id/menu_emotions"
            android:title="@string/emotions"
            android:icon="@drawable/ic_smi2"
            android:showAsAction="always|withText" />
        <item 
            android:id="@+id/menu_categories"
            android:title="@string/categories"
            android:icon="@drawable/ic_folder"
            android:showAsAction="always|withText" />
 </menu>

</item>

</menu>

此处的顺序并不重要,因为此菜单是我需要通过物理菜单按钮查看的唯一菜单。

答案 1 :(得分:0)

因此,经过多次尝试,我找到了一种方法来使这些项目正确显示在任何地方。因此,诀窍是将所有项目放到具有一些id和android:checkableBehavior="single"的group元素中,这是我能够按照xml中的定义进行渲染的唯一方法。如果我从第一组中删除ID,则最后两项会合并到先前的菜单子项中。相当多的android菜单实现。应该在某个地方进行报告,但希望其他人会这样做。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group
        android:id="@+id/signup_1_identification_group"
        android:checkableBehavior="single">
        <item
            android:id="@+id/dopkkpokadad"
            android:title="@string/signup_1_identification" />
    </group>
    <item
        android:id="@+id/kokopj"
        android:title="@string/signup_6_nationality">
        <menu android:id="@+id/signup_6_nationality_menu">
            <group
                android:id="@+id/signup_6_nationality_group"
                android:checkableBehavior="single">
                <item
                    android:id="@+id/dadceqpovjopeqad"
                    android:title="Hlavna" />
                <item
                    android:id="@+id/cionno"
                    android:title="Dalsia" />
                <item
                    android:id="@+id/dkbvyukbadad"
                    android:title="Materinsky Jazyk" />
            </group>
        </menu>
    </item>
    <group
        android:id="@+id/signup_last_group"
        android:checkableBehavior="single">
        <item
            android:id="@+id/dafeqpokopqdad"
            android:title="@string/signup_7_religion" />
        <item
            android:id="@+id/dakopefhpoiueqdad"
            android:title="@string/signup_8_finalization" />
    </group>
</menu>

这是从此xml正确呈现的方式:

This is how it is rendered correctly

当我从拳头组中删除ID时,我又回来了错误的行为,最后两个项目合并了,在某些情况下它们会消失或其他怪异的事情会根据其他布局更改而发生,我相信android菜单的实现只是个问题...

When I remove id from fist group I get back wrong behaviour: