1
resposta

Implementando função "Editar" no ContextMenu

Galera, estou tentando adicionar a função "Editar" ao ContextMenu, ao invés de abrir o FormularioActivity ao clicar. Porém, não estou conseguindo...Tentei utilizar a mesma sequência que foi utilizado no OnItemClickListener, mas sempre recebo um NullPointerException toda vez que testo.

Alguém pode me ajudar por favor?

O código está assim:

ListaProjetosActivity.java

A View abre o Menu de Contexto. Se eu clico em "Remover", ele funciona perfeitamente, está excluindo. Agora se eu clico em "Editar" o código quebra.

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        getMenuInflater().
                inflate(R.menu.activity_listaprojetos_menu, menu);
    }

    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {

        int itemId = item.getItemId();

        if (itemId == R.id.activity_listaprojetos_menu_remover) {
            listaProjetosView.confirmaRemocao(item);
        }
        if (itemId == R.id.activity_listaprojetos_menu_editar) {
            listaProjetosView.carrega(item);
        }
        return super.onContextItemSelected(item);
    }

ListaProjetosView.java

Aqui, a função "carrega()" deveria buscar a posição do item clicado, e jogar pra new Intent e colocar a chave "projeto", projeto.

    public void carrega(MenuItem item) {
        AdapterView.AdapterContextMenuInfo menuInfo =
                (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        Projeto projetoEscolhido = adapter.getItem(menuInfo.position);
        abreFormularioEditaProjeto(projetoEscolhido);
    }

    private void abreFormularioEditaProjeto(Projeto projeto) {
        Intent vaiParaFormularioActivity = new Intent(this, FormularioProjetoActivity.class);
        vaiParaFormularioActivity.putExtra(KEY_PROJETO, projeto);
        startActivity(vaiParaFormularioActivity);
    }

FormularioProjetoActivity.java

Aqui no formulário, ele devera analisar se a intent tem a chave "projeto" e carregar os dados já preenchidos...mas isto não está ocorrendo.

    private void carregaProjeto() {
        Intent dados = getIntent();
            if (dados.hasExtra(KEY_PROJETO)) {
                setTitle(TITLE_APPBAR_EDITAPROJETO);
                projeto = (Projeto) dados.getSerializableExtra(KEY_PROJETO);
                preencheCampos();
        } else {
            setTitle(TITLE_APPBAR_NOVOPROJETO);
            projeto = new Projeto();
        }
    }
1 resposta

Marco, boa tarde!

Você está enviando algo nulo para sua Activity de formulário, tente verificar se ele está encontrando esse objeto.

Eu fiz um teste adicionei a funcionalidade que você passou e rodou, você pode me passar o seu código, acredito que seja algo que não está aí, você poderia compartilhar o seu código inteiro com a gente via github pra que eu possa testar.

Aguardo sua resposta e bons estudos!