1
resposta

Desafio do getExtra e carregamento

Oi, eu olhei as explicações o artigo indicado, mas não entendi o que deveria ser feito, porque o exemplo era muito diferente e eu fiquei com algumas dúvidas de como utilizar o parcelable, então essa parte ficou confusa depois nesse vídeo pra mim, o que é esse getParcelableExtra, de onde vem, pra que serve, eu só vi getExtra com string?

Porque criar uma variável e passar dentro dessa função depois o produto = produtoCarregado, entendo que precisa passar dentro do remove, mas e na função tentaCarregarProduto, faz o que?

Não entendi o fluxo desse código?

De onde vem o CHAVE_PRODUTO?

O finish fecha a activity?

O que faz o with(binding)?

 private fun tentaCarregarProduto() {
        intent.getParcelableExtra<Produto>(CHAVE_PRODUTO)?.let { produtoCarregado ->
            preencheCampos(produtoCarregado)
        } ?: finish()
    }

    private fun preencheCampos(produtoCarregado: Produto) {
        with(binding) {
            activityDetalhesProdutoImagem.tentaCarregarImagem(produtoCarregado.imagem)
            activityDetalhesProdutoNome.text = produtoCarregado.nome
            activityDetalhesProdutoDescricao.text = produtoCarregado.descricao
            activityDetalhesProdutoValor.text =
                produtoCarregado.valor.formataParaMoedaBrasileira()
        }
    }
1 resposta

Olá Gisele, tudo bem?

O método getParcelableExtra é usado para receber o objeto Parcelable ou seja, algum tipo de dado diferente dos tipos primitivos, análogo ao getStringExtra, podemos ver o getParcelableExtra<Produto> como um "getProdutoExtra" que foi enviado por outra atividade.

Quando você chama intent.getParcelableExtra<Produto>(CHAVE_PRODUTO), você está solicitando a chave CHAVE_PRODUTO que foi enviada como um objeto Parcelable da activity anterior e esperando que seja um objeto do tipo Produto.

A variável CHAVE_PRODUTO é uma constante definida na pasta activity > ConstantesActivities.kt como uma String, para ser usada como chave para enviar o objeto Parcelable da atividade anterior e receber na atividade atual, poderia usar tranquilamente a string "produto" no lugar de CHAVE_PRODUTO, porém ao utilizarmos a constante, evitamos qualquer tipo de erro de digitação.

O método let é usado para verificar se o objeto Produto foi enviado com sucesso, e se for verdadeiro, ele chama a função preencheCampos para preencher as informações do produto na tela. Se o objeto for nulo, o método finish é chamado para encerrar a atividade atual.

A função preencheCampos é responsável por preencher os campos na tela com as informações do objeto Produto recebido como parâmetro. O with(binding) é usado para evitar a repetição de binding.activityDetalhesProduto em todas as linhas, tornando o código mais limpo e legível.

Por fim, o finish é usado para encerrar a atividade atual quando a ação for concluída.

Qualquer dúvida, fico a disposição :)

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