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

ContextMenu não aparece

Olá, pessoal.

Meu ContextMenu não aparece ao pressionar sobre um item da listview. Poderiam me ajudar a encontrar o erro, por favor? A activity também tem um fab, ele estaria "roubando" o foco talvez?

private void configuraLista() {
        listView = findViewById(R.id.listview_categoria);

        adapter = new CategoriaAdapter(this, new CategoriaAdapter.OnItemClickListener(){
            @Override
            public void onItemClick(int posicao, Categoria categoria) {
                Cadastro_Categoria.this.abreFormularioEdita(posicao, categoria);
            }
        });

        listView.setAdapter(adapter);

        listView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
            @Override
            public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenu.ContextMenuInfo contextMenuInfo) {
                contextMenu.add(Menu.NONE, 1, Menu.NONE, "Remover");
            }
        });
    }

    @Override public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        int position = menuInfo.position;
        if(item.getItemId() == 1) {
            remover(position);
        }
        return super.onContextItemSelected(item);
    }
6 respostas

Fala Thiago, de boa?

Cara geralmente a gente usa o método registerForContextMenu passando a view que deve acionar o menu de contexto, para que então a Activity possa construir corretamente o menu de contexto.

Tenta fazer nesse formato, acredito que tem mais chances de dar certo.

Na formação básica temos algo assim

Oi Thiago, blz? Olhando apenas a amostra do seu código parece tudo certo... Sendo assim, é preciso investigar outras possibilidades. O FAB provavelmente não está afetando, geralmente é o listener de clique longo que afeta o context menu, verifique se existe algum.

Caso não tiver, compartilhe o seu projeto comigo via GitHub, dessa forma, eu posso simular o que está acontecendo e investigar o possível problema.

[]s

Bom dia, Matheus. Tudo bom? Antes de postar aqui no fórum, pesquisar no Google e cheguei a colocar o registerForContextMenu, mas também não funcionou. Aí, vi o vídeo do Alex e fiz da mesma forma e não deu tb kkkkkkkkk

Bom dia, Alex. Tudo bom? Na pesquisa que fiz realmente falou do click longo e não estou usando. Achei que poderia ser fab então... Menos mal... O link do projeto é https://github.com/thiagornela/visita

Para ficar mais fácil a localização, um exemplo seria este pacote package com.example.cadastrodevisita.cadastro.categoriaou, com o app em execução: 1) clicar no fab inicial, 2) vai abrir outros fabs e clica no primeiro fab, o do topo, 3) vai abrir a tela de configurações, ir no botão cadastros gerais (primeira opção), 4) ir no primeiro botão, categorias

Obrigado novamente pela ajuda, pessoal.

solução!

Oi Thiago, fiz um teste aqui, removi o seu listener que criou no adapter de ListView e aparentemente esse é o problema. A API do ListView já oferece algumas implementações de clique, como é o caso do setOnItemClickListener, portanto, ao invés de fazer a implementação na mão por meio do adapter, utilize essa implementação para pegar o item que precisa. Segue o exemplo

        listView.setOnItemClickListener((parent, view, position, id) -> {
            abreFormularioEdita(position, adapter.getItem(position));
        });

Resumindo, remova o listener do adapter e utilize o setOnItemClickListener.

[]s

Fala, Alex. Nossa. Foi exatamente isso. Obrigado por toda a ajuda de vocês.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software