2
respostas

Não aparece os produtos na activity principal

Olá, meu código está, em princípio, todo correto, igual ao do instrutor. O problema é que a MainActivity continua não apresentando conteúdo

Código da MainActivity:

package br.com.alura.orgs.ui.activity

import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import br.com.alura.orgs.R
import br.com.alura.orgs.ui.dao.ProdutosDao
import br.com.alura.orgs.ui.model.Produto
import br.com.alura.orgs.ui.recyclerview.adapter.ListaProdutoAdapter
import com.google.android.material.floatingactionbutton.FloatingActionButton
import java.math.BigDecimal

class MainActivity : AppCompatActivity(R.layout.main_activity) {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onResume() {
        super.onResume()
        val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
        val dao = ProdutosDao()
        recyclerView.adapter = ListaProdutoAdapter(this, dao.buscaTodos())

        findViewById<FloatingActionButton>(R.id.addFormButton).setOnClickListener {
            startActivity(Intent(this, FormProdutoActivity::class.java))
        }
    }
}

Código do ProdutosDao:

package br.com.alura.orgs.ui.dao

import br.com.alura.orgs.ui.model.Produto

class ProdutosDao {
    fun adiciona(produto: Produto) {
        produtos.add(produto)
    }

    fun buscaTodos(): List<Produto> {
        return produtos.toList()
    }

    companion object {
        private val produtos = mutableListOf<Produto>()
    }
}

Código do FormProdutoActivity:

package br.com.alura.orgs.ui.activity

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.PersistableBundle
import android.util.Log
import android.widget.Button
import android.widget.EditText
import br.com.alura.orgs.R
import br.com.alura.orgs.ui.dao.ProdutosDao
import br.com.alura.orgs.ui.model.Produto
import java.math.BigDecimal

class FormProdutoActivity : AppCompatActivity(R.layout.activity_form_produto) {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val botaoSalvar = findViewById<Button>(R.id.botao_salvar)
        botaoSalvar.setOnClickListener {
            val campoNome = findViewById<EditText>(R.id.nome)
            val nome = campoNome.text.toString()
            val campoDesc = findViewById<EditText>(R.id.desc)
            val descricao = campoDesc.text.toString()
            val campoValor = findViewById<EditText>(R.id.valor)
            val valorEmTexto = campoValor.text.toString()
            val valorFinal = if (valorEmTexto.isBlank()) {
                BigDecimal.ZERO
            } else {
                BigDecimal(valorEmTexto)
            }
            val produtoNovo = Produto (
                nome = nome,
                descricao = descricao,
                valor = valorFinal
            )


            Log.i("FormProdutoActivity", "onClick: $produtoNovo")
            val dao = ProdutosDao()
            dao.adiciona(produtoNovo)
            Log.i("FormProdutoActivity", "onClick: ${dao.buscaTodos()}")
            finish()
        }
    }
}
2 respostas

Olá, Juan!

Pelo código que você compartilhou, parece que você está no caminho certo para carregar os produtos do DAO no RecyclerView. No entanto, parece que você esqueceu de chamar o método setLayoutManager() no RecyclerView para definir o layout do RecyclerView.

Você pode adicionar o seguinte código no método onResume() da MainActivity para configurar o layout do RecyclerView:

recyclerView.layoutManager = LinearLayoutManager(this)

Isso garantirá que os itens do RecyclerView sejam exibidos em uma lista vertical.

Além disso, verifique se você está chamando o método notifyDataSetChanged() no adapter após adicionar um novo produto ao DAO. Isso atualizará a exibição do RecyclerView para incluir o novo produto adicionado. Você pode adicionar o seguinte código após dao.adiciona(produtoNovo):

recyclerView.adapter?.notifyDataSetChanged()

Essas alterações devem resolver o problema de não exibir os produtos na MainActivity. Lembre-se de testar o aplicativo várias vezes para garantir que tudo esteja funcionando corretamente.

Espero ter ajudado e bons estudos!

Oi Matheus! Sua primeira dica já bastou pra resolver o problema, mas fiquei curioso com a outra dica: recyclerView.adapter?.notifyDataSetChanged() , pode me dizer o que significa mais detalhadamente? Já foi passado em curso isso para mim, porém não entendi muito bem o uso, inclusive, quando coloquei esse código, meu AS botou aquela linha amarela embaixo, sabe? Insira aqui a descrição dessa imagem para ajudar na acessibilidade

E quando clico Alt + Enter, isso aparece:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

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