Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Desafio final. Clique no produto não funciona como esperado

Olá. Estou com dificuldade para compreender/solucionar um problema. Como o commit de resolução é diferente do projeto que fazemos devido os desafios anteriores, nem fazendo a leitura consigo sanar minha dúvida. Em resumo, com o clique no produto dentro do recyclerView na TodosProdutosActivity, nada acontece. Realizando o cliqueLongoDeletar (de um outro desafio) o app se comporta como o esperado, mas não como o descrito/codificado

Em detalhes, neste ponto do commit na Classe TodosProdutosActivity:

private fun criaAdapterDeProdutosComCabecalho(produtosUsuario: Map.Entry<String?, List<Produto>>) =
        listOf(
            CabecalhoAdapter(this, listOf(produtosUsuario.key)),
           ListaProdutosAdapter(
                        this,
                        produtosUsuario.value
                    ) { produtoClicado ->
                        vaiPara(DetalhesProdutoActivity::class.java) {
                            putExtra(CHAVE_PRODUTO_ID, produtoClicado.id)
                        }
                    }
        )

Supondo que o adapter utilizado ListaProdutosAdapter possua apenas uma única HoF quandoClicaNoItem como no adapter do commit, funciona normalmente, porém, com os desafios feitos, temos outros comportamentos como longClick para editar e longClick para remover. SE definido que a quandoClicaNoItem é a última a ser declarada, funciona normalmente, porém, caso não seja, ao clicar no produto temos o feedback no logcat que foi clicado, mas nada acontece. E, caso façamos o que a última HoF declarada descreve (no meu caso, o cliqueLongoDeletar), o código funciona como o esperado (abrir a tela de detalhes), mas não exatamente como descrito.

Como solucionar isso? Fazendo a chamada do método manualmente? Não consegui utilizar o método do adapter isoladamente como em outras classes.

O meu adapter está declarado da seguinte forma:

class ListaProdutosUsuarioAdapter(
    private val context: Context,
    produtos: List<Produto> = emptyList(),
    var quandoCliqueLongoNoItem_Editar: (produto: Produto) -> Unit = {},
    var quandoCliqueLongoNoItem_Deletar: (produto: Produto) -> Unit = {},
    var quandoClicaNoItem: (produto: Produto) -> Unit = {}
) : RecyclerView.Adapter<ListaProdutosUsuarioAdapter.ViewHolder>() {
1 resposta
solução!

Resolvi da seguinte maneira, não sei de existe forma mais simplificada, mas segue para caso alguém tenha a mesma dificuldade que eu tive:

    private fun criaListaDosAdaptersParaConcat(produtosUsuario: Map.Entry<String?, List<Produto>>)
            : List<RecyclerView.Adapter<out RecyclerView.ViewHolder>> {

        val adapterUsuario = ListaTodosUsuariosAdapter(this, listOf(produtosUsuario.key))
        val adapterProdutosUsuario = ListaProdutosUsuarioAdapter(this, produtosUsuario.value)
        adapterProdutosUsuario.quandoClicaNoItem = { produtoClicado ->
            vaiPara(DetalhesProdutoActivity::class.java) {
                putExtra(CHAVE_PRODUTO_ID, produtoClicado.id)
            }
        }

        return listOf(adapterUsuario,adapterProdutosUsuario)
    }
}

Aceito sugestões.

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