Android: изменение пунктов меню параметров программно - PullRequest
80 голосов
/ 20 августа 2011

Можно ли программно изменить пункты меню?Кто-нибудь может дать мне пример, пожалуйста?

Кроме того, я хочу отключить некоторые элементы, чтобы они не слушали щелчки, это возможно?

Ответы [ 12 ]

0 голосов
/ 12 декабря 2018

Код Котлина для программного доступа к панели инструментов OptionsMenu и изменения текста / значка, ..:

1-У нас есть пункт меню в файле пунктов меню, например: menu.xml, пример кода для этого:

 <?xml version="1.0" encoding="utf-8"?> 
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/balance"
      android:title="0"
      android:orderInCategory="100"
      app:showAsAction="always" />
 </menu>

2 - Определить переменную для доступа к объекту меню в классе:

var menu: Menu? = null

3 - инициализировать его в onCreateOptionsMenu:

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    // Inflate the menu; this adds items to the action bar if it is present.
    menuInflater.inflate(R.menu.main, menu)
    this.menu = menu
    return true
}

4- Доступ к пунктам меню внутри вашего кода или развлечения:

private fun initialBalanceMenuItemOnToolbar() {
var menuItemBalance = menu?.findItem(R.id.balance)
    menuItemBalance?.title = Balance?.toString() ?: 0.toString()
    // for change icon : menuWalletBalance?.icon
}
0 голосов
/ 23 августа 2016

Вы можете выполнить свою задачу, просто выполнив, как показано ниже:

private Menu menu;

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

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    this.menu = menu;
    return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.action_toggle_grid) {
        handleMenuOption(id);
        return true;

    } else if(id == R.id.action_toggle_list){
        handleMenuOption(id);
        return true;
    }

    return super.onOptionsItemSelected(item);
}

private void handleMenuOption(int id) {
    MenuItem item = menu.findItem(id);
    if (id == R.id.action_toggle_grid){
        item.setVisible(false);
        menu.findItem(R.id.action_toggle_list).setVisible(true);
    }else if (id == R.id.action_toggle_list){
        item.setVisible(false);
        menu.findItem(R.id.action_toggle_grid).setVisible(true);
    }
}
...