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

Erro registerForContextMenu();

Olá, estou tendo um problema no ultimo módulo quando tenho que inserir um context menu, quando eu coloco o código registerContextMenu(listaAluno); o meu aplicativo que estava funcionando perfeitamente começa a nem abrir mais e a crashar, vocês sabem o que pode ser ?

4 respostas
solução!

Olá Fabricio, como está ?

Posta o código da sua activity aqui para vermos por gentileza

Abraços

package br.com.alura.agenda;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.ContextMenu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import java.util.List;

import br.com.alura.agenda.br.com.alura.agenda.dao.AlunoDAO;
import br.com.alura.agenda.br.com.alura.modelo.Aluno;

public class ListaAlunosActivity extends AppCompatActivity {


    private ListView listaAluno;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_alunos);

        Button novoAluno = (Button) findViewById(R.id.ListaAluno_Novo_Aluno);
        novoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                startActivity(intent);
            }
        });

        registerForContextMenu(listaAluno);
    }

    private void carregaLista() {
        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.buscaAlunos();
        dao.close();

        listaAluno = (ListView) findViewById(R.id.lista_alunos);
        ArrayAdapter<Aluno> adapter;
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, alunos);
        listaAluno.setAdapter(adapter);
    }

    @Override
    protected void onResume() {
        super.onResume();
        carregaLista();
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        menu.add("Deletar");
    }
}

Fabricio, olá !

O que está acontecendo é que quando você tem dado o registerForContextMenu passando a ListView, é gerada uma exception. Vamos lembrar qual a ordem do ciclo de vida da activity - onCreate -> onStart -> onResume ->>> demais metodos.

Quando você está criando sua activity, você já está deixando preparada a ListView para ser criado o menu de contexto, mas observe que sua ListView só recebe um valor no OnResume, portanto no onCreate, ela é nula, o que faz o app dar crash.

Atribuiu um valor no oncreate, atráves do findViewById, que no momento que for registrar, ele irá encontrar um referencia.

Espero ter ajudado.

Sim funcionou perfeitamente, agora entendi meu erro, muito obrigado pela ajuda =).