簡體   English   中英

長按后,帶有子菜單的操作欄菜單項在Android 4.4上不起作用

[英]Actionbar menu item with submenu doesn't work on Android 4.4 after long click

我們在應用程序中使用ActionBar。 它包含幾個帶有圖標的菜單項。 其中之一是右上角的“幫助”。 它有一些子菜單。 如果用戶長按菜單項,則ActionBar將顯示工具提示。 同樣在Android 4.4上,如果用戶單擊帶有子菜單的菜單項並向下滑動手指,則它會展開子菜單。

有一陣子,用戶同時看到工具提示和擴展子菜單。 問題在於,單擊子菜單項之一后,根菜單項不再起作用,它不會展開子菜單,甚至不會突出顯示。 但是,ActionBar上的其他菜單項仍然有效。 似乎是Android的ActionBar實現中的錯誤。 工具提示和子菜單在Android 4.4上都獲得了一些新的動畫效果,因此它們可能存在一些並發問題。

我目前正在尋找任何解決方法。 任何幫助將不勝感激。

菜單xml聲明。

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

    <item
        android:id="@+id/rate"
        android:icon="@drawable/rate_button_bg"
        android:title="@string/menu_rate_title"
        android:showAsAction="always" />

    <item
        android:id="@+id/like"
        android:icon="@drawable/like_button_bg"
        android:title="@string/menu_like_title"
        android:showAsAction="always" />

    <item
        android:id="@+id/share"
        android:icon="@drawable/share_button_bg"
        android:title="@string/menu_share_title"
        android:showAsAction="always" />

    <item
        android:id="@+id/help"
        android:icon="@drawable/global_icon_help"
        android:title="@string/menu_help_title"
        android:showAsAction="always">
        <menu>
            <item
                android:id="@+id/item_quick_start"
                android:showAsAction="always"
                android:title="@string/quick_start_tour_text" />

            <item
                android:id="@+id/item_faq"
                android:showAsAction="always"
                android:title="@string/frequently_asked_questions_text" />

            <item
                android:id="@+id/item_help"
                android:showAsAction="always"
                android:title="@string/contact_customer_support_text" />

        </menu>
    </item>

</menu>

創建菜單:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_home, menu);
    return true;
}

處理點擊次數:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (R.id.item_quick_start == item.getItemId()) {
        // do some stuff
        return true;
    } else if (R.id.item_faq == item.getItemId()) {
       // do some stuff            
       return true;
      ...
    } else {
        // Default value
        return super.onOptionsItemSelected(item);
    }
}

找到解決方法。 如果我調用invalidateOptionsMenu(); 然后菜單項仍然有效。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (R.id.item_quick_start == item.getItemId()) {
        // do some stuff
        invalidateOptionsMenu();
        return true;
    } else if (R.id.item_faq == item.getItemId()) {
       // do some stuff            
       invalidateOptionsMenu();
       return true;
      ...
    } else {
        // Default value
        return super.onOptionsItemSelected(item);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM