2016-08-10 2 views
0

Я добавил два пункта меню. Оба они работают хорошо, но всякий раз, когда я нажимаю кнопку меню, появляются новые пункты меню рядом со старым. Как ниже вы можете увидетьЭлементы меню продолжают добавляться при каждом нажатии кнопки меню

enter image description here

ниже мой пункт меню XML

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


<item 
android:title="Search" 
android:icon="@drawable/search_white_24dp" 
android:id="@+id/searchmenu" 
app:showAsAction="always"> 

</item> 
<item 
android:icon="@drawable/settings_white_24dp" 
android:title="Setting" 
android:id="@+id/settingmenu" 
app:showAsAction="always" 
/> 


</menu> 

и вот мой код

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 

     case R.id.searchmenu: 
      editText = DuwaManager.openSearchBox(this, 
getSupportActionBar(), "DuwaListView"); 
      break; 
     case R.id.settingmenu: 

      break; 

     case R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      break; 
    } 

помогите пожалуйста, где я не прав?

К сожалению, это поможет долго, но у меня есть второй вопрос

2) Мой второй вопрос у меня есть еще одно меню. xml, в котором вместо значка поиска есть значок значка, но когда я пытаюсь показать на панели действий с тем же кодом, элемент меню не отображается на панели действий. Ниже другое мое меню XML

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
> 
<item 
android:title="Share" 
android:icon="@drawable/share_white" 
android:id="@+id/share_tarika" 
app:showAsAction="always" 
/> 
<item android:title="Setting" 
    android:icon="@drawable/settings_white_24dp" 
    android:id="@id/settingmenu" 
    app:showAsAction="always"/> 
</menu> 

и его код

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 

     case R.id.share_tarika: 

      break; 
     case R.id.settingmenu: 

      break; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

Что вы возвращаете из 'onOptionsItemSelected()'? – Shaishav

+0

, пожалуйста, помогите мне по второму вопросу – FaisalAhmed

ответ

2

Попробуйте

@Override 
    public void onCreateOptionsMenu(Menu menu) { 
     menu.clear();// use menu.clear 
     MenuInflater inflater = getMenuInflater();  
     inflater.inflate(R.menu."your current activity name ", menu); 
    return true; 
} 

использовать menu.clear()

+0

и что я должен возвращать за пределы true или false – FaisalAhmed

+0

для каждого случая return true и для возврата по умолчанию super.onOptionsItemSelected (item); – Moulesh

+0

проверить обновленный ответ .. lemme знает, если он работает для u – Moulesh

1

Лучшее сделать это, так как это:

@Override 
public void onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu."your current activity name ", menu); 
return true; 
} 

если у вас есть только одно меню. Затем установите меню со страницы активности и верните значение true, после чего не нужно очищать меню. и никакое дублирующее меню не появится.

Но если вы используете два фрагмента и вам нужно изменить меню действий в соответствии с фрагментом, вам нужно только очистить меню и сбросить его с помощью нового.

И если вы используете onCreateOptionsMenu (меню меню) в фрагменте, то удалите их.

Смежные вопросы