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

coil gif no adapter

Olá!

No código do git não é mostrado como implementar o código de suporte do gif dentro do adapter. Eu fiz assim e funcionou, mas gostaria de saber se existe uma abordagem mais correta.

class ListaProdutosAdapter(
    private val context: Context,
    produtos: List<Produto>
) : RecyclerView.Adapter<ListaProdutosAdapter.ViewHolder>() {

    private val produtos = produtos.toMutableList()



    inner class ViewHolder(private val binding: ProdutoItemBinding) :
        RecyclerView.ViewHolder(binding.root) {
***************************************************************
        var imageLoader = ImageLoader.Builder(context)
            .componentRegistry {
                if (Build.VERSION.SDK_INT >= 28) {
                    add(ImageDecoderDecoder(context))
                } else {
                    add(GifDecoder())
                }
            }
            .build()
***************************************************************

        fun vincula(produto: Produto) {
            val nome = binding.produtoItemNome
            nome.text = produto.nome
            val descricao = binding.produtoItemDescricao
            descricao.text = produto.descricao
            val valor = binding.produtoItemValor
            val valorEmMoeda = formataParaMoedaEuro(produto.valor)
            valor.text = valorEmMoeda
            val imagem = binding.imageView
            imagem.load(produto.imagem, imageLoader)
        }

        private fun formataParaMoedaEuro(valor: BigDecimal): String? {
            val formatador = NumberFormat.getCurrencyInstance(Locale("pt", "pt"))
            return formatador.format(valor)
        }

    }

Pensei em deixar no escopo da outer class mas acabei tomando uma NPE

obrigado

3 respostas

Desse jeito que tu fez tá bem maneiro e é o recomendado pela própria documentação: https://github.com/coil-kt/coil/tree/main/coil-gif

Eae, Matheus. Tudo bem?

Minha dúvida era mais no sentido de se eu deveria deixar o código na classe acima, a ListaProdutosAdapter

solução!

Saquei, não tinha entendido assim sua pergunta, foi mal :(

Cara então, na minha cabeça se você for usar a mesma instância pro projeto inteiro, isso poderia estar encapsulado numa classe e ser reaproveitado ai, se tu tiver usando algum framework de injeção de dependência, você poderia fazer a injeção dele também.

De toda forma acho que poderia deixar esse objeto fora do seu Adapter