В меню параметров Android на панели действий отображаются повторяющиеся значки

панель действий (панель инструментов) на Android имеет 3 меню опций. Он работает нормально. Но проблема в том, что когда я удаляю и переустанавливаю это дублирование пункта меню. Также название также остается прежним, не меняясь. после иногда, скажем, если мы закроем приложение и перезапустим его нормально. Я совершенно сбит с толку и поражен.

Вот код, MainActivity (OnCreateOptionsMenu):

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.clear();
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.menu_main, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = null;
        if (searchItem != null) {
            searchView = (SearchView) searchItem.getActionView();
        }
        if (searchView != null) {
            searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
        }
        MenuItem item = menu.findItem(R.id.action_wishlist);
        wishlistCount = (RelativeLayout) MenuItemCompat.getActionView(item);
        wishlistCount.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        setWishlistCount();
        MenuItem cartitem = menu.findItem(R.id.action_cart);
        cartCount = (RelativeLayout) MenuItemCompat.getActionView(cartitem);
        cartCount.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        restoreToolbar();
        return super.onCreateOptionsMenu(menu);
    }

Вот мой menu_main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
 
    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="Search"/>

    <item
        android:id="@+id/action_wishlist"
        android:orderInCategory="300"
        android:title="@string/wishlist"
        app:actionLayout="@layout/actionbar_badge_layout"
        android:icon="@drawable/ic_wishlist_dark"
        app:showAsAction="always"></item>

    <item
        android:id="@+id/action_cart"
        android:orderInCategory="300"
        android:title="@string/cart"
        app:actionLayout="@layout/actionbar_badge_cart_layout"
        android:icon="@drawable/ic_cart_dark"
        app:showAsAction="always"></item>
</menu>

Вот скриншот: 1: первый раз: введите здесь описание изображения

2: обычный: введите здесь описание изображения

Примечание. Проблема возникает, когда приложение открывается с открытой панелью навигации, в противном случае оно работает нормально. Меню createoptions всегда вызывается, но все равно не работает. Кто-нибудь может помочь в этом?


person Siva Sabharish    schedule 09.12.2015    source источник
comment
Спасибо за быстрый ответ, Майк, но проблема та же. На самом деле проблема в том, что панель действий не обновляется в первый раз, но она проходит через все функции.   -  person Siva Sabharish    schedule 09.12.2015


Ответы (2)


Я очистил его самостоятельно, изменив код с "onCreateOptionsMenu" на "OnPrepareOptionsMenu". Также рекомендуется вызывать Суперкласс перед очисткой или раздуванием меню.

Спасибо за все.

person Siva Sabharish    schedule 10.12.2015
comment
Это не работает для меня... - person JPM; 10.02.2021

Точнее, это должно помочь:

menu.clear() и return super.onCreateOptionsMenu(menu); делают свое дело! :)

@Override
public boolean onPrepareOptionsMenu(final Menu menu) 
{
    menu.clear();
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.home, menu);
    return super.onCreateOptionsMenu(menu);
}        

ВАШЕ ЗДОРОВЬЕ! :)

person Imtiaz Abir    schedule 08.09.2016