Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como alterar em tempo de execução o título de um item de menu?

Como alterar em tempo de execução o título de um item de menu? No caso abaixo, como alterar "Cliente" para "Fornecedor"

menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/lista_menu"
        android:title="Cliente" 
        app:showAsAction="always" />
</menu>
2 respostas

Olá Marcelo, tudo bem?

Para isso, eu recomendo utilizar a dependência de fragments do android para utilizar a função addMenuProvider, basta incluir esta linha nas suas dependências de módulo:

    implementation 'androidx.fragment:fragment-ktx:1.5.4'

Agora, existem diversas formas de resolver seu problema, estarei lhe aparesentando uma delas. Na sua Activity/Fragment, crie um variável global para representar a instância se é cliente ou não.

private var isClient: Boolean = true

Em seguida, vamos configurar seu menu através de uma função chamada setupMenu e dentro dela implementamos os métodos do MenuProvider que nos fornece o onCreateMenu onde podemos fazer as alterações, eu fiz um botão que altera esse título, mas você pode usar da forma que achar melhor, para isso vamos encontrar o item dentro do menu e mudar a propriedade text dele através da lógica com a nossa variável isClient:

                    val title = if (isClient) "Client" else "Fornecedor"
                    val menuItem = menu.findItem(R.id.cliente_ou_fornecedor)
                    menuItem.title = title

O código completo da activity se encontra aqui:

class MainActivity : AppCompatActivity() {

    private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

    private var isClient: Boolean = true

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        setupMenu()
    }

    private fun setupMenu() {
        addMenuProvider(object : MenuProvider {
            override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
                menuInflater.inflate(R.menu.main_menu, menu)
                binding.buttonChangeTitle.setOnClickListener {
                    isClient = !isClient
                    val title = if (isClient) "Client" else "Fornecedor"
                    val menuItem = menu.findItem(R.id.cliente_ou_fornecedor)
                    menuItem.title = title
                }
            }

            override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
                return true
            }
        })
    }
}

Se restar qualquer dúvida, estarei à disposição :)

Forte abraço e bons estudos!!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!
solução!

Grato, pela dica, Matheus!

Acabei solucionando de uma forma mais fácil pra minha necessidade, usando setTitle

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch ( item.getItemId() ){
        case R.id.action_cadastro :
            if (Utils.gExpandir == 0) {
                Utils.gExpandir = 1;
                item.setTitle("Cliente");
            } else {
                Utils.gExpandir = 0;
                item.setTitle("Fornecedor");
            }
            AdapterResultadoCadastro.notifyDataSetChanged();
            break;
    }

    return super.onOptionsItemSelected(item);
}