Na verdade fiqueri com muita dúvida em toda a implementação mas sobre a parte final eu não entendi otoda a parte de "quandoClicaEmEditar(produto)" e "quandoClicaEmRemover(produto)"
o meu codigo funciona sem essa parte porém quando adiciono esses dois métodos ele quebra na parte do produto. A parte que está comentada dentro de onMenuItemClick.
Eles funcionam somente quando eu crio uma função pra cada um deles que também comentei.
package br.com.alura.orgs.adapter
import...
class ListaProdutosAdapter(
private val context: Context,
produtos: List<Produto> = emptyList(),
var quandoClicaEmEditar: (produto: Produto) -> Unit = {},
var quandoClicaEmRemover: (produto: Produto) -> Unit = {}
) : RecyclerView.Adapter<ListaProdutosAdapter.ViewHolder>() {
private val produtos = produtos.toMutableList()
inner class ViewHolder(private var binding: ProdutoItemBinding): RecyclerView.ViewHolder(binding.root), PopupMenu.OnMenuItemClickListener {
fun vincula(produto: Produto) {
val nome = binding.nome
nome.text = produto.nome
val descricao = binding.descricao
descricao.text = produto.descicao
val valor = binding.preco
valor.text = NumberFormat.getCurrencyInstance(Locale("pt", "br")).format(produto.valor)
binding.imageViewItem.carregarImagem(produto.imagem)
binding.cardView.setOnClickListener {
val intent = Intent(context, DetalhesProdutoActivity::class.java).apply {
putExtra("produto", produto)
}
ContextCompat.startActivity(context, intent, null)
}
binding.cardView.setOnLongClickListener {
PopupMenu(context, itemView).apply {
menuInflater.inflate(
R.menu.detalhes_produto_menu, menu
)
setOnMenuItemClickListener(this@ViewHolder)
}.show()
true
}
}
override fun onMenuItemClick(item: MenuItem?): Boolean {
item?.let {
when (it.itemId) {
R.id.detalheProdutoMenu_editar -> {
//quandoClicaEmEditar(produto)
}
R.id.detalheProdutoMenu_excluir -> {
//quandoClicaEmRemover(produto)
}
}
}
return true
}
}
// private fun quandoClicaEmEditar(produtos: MutableList<Produto>) {
// Log.e("testeMenu", "click editar")
// }
//
// private fun quandoClicaEmRemover(produtos: MutableList<Produto>) {
// Log.e("testeMenu", "click excluirr")
// }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflate = LayoutInflater.from(context)
val binding = ProdutoItemBinding.inflate(inflate, parent, false)
return ViewHolder(binding)
}
override fun getItemCount(): Int {
return produtos.size
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val produto = produtos[position]
holder.vincula(produto)
}
fun atualiza(todosProdutos: List<Produto>) {
this.produtos.clear()
this.produtos.addAll(todosProdutos)
notifyDataSetChanged()
}
}
Não ententendi porque tenho fazer essa parte na main tambem.
package br.com.alura.orgs.ui
import...
class ListaProdutosActivity: AppCompatActivity(){
private var adapter = ListaProdutosAdapter(this,)
private lateinit var binding: ActivityListaProdutosBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityListaProdutosBinding.inflate(layoutInflater)
setContentView(binding.root)
creatList()
fab_lick()
}
override fun onResume() {
super.onResume()
val db = AppDatabase.instacia(this)
val produtoDao = db.produtoDao()
adapter.atualiza(produtoDao.buscarTodos())
creatList()
}
private fun creatList() {
binding.rv1.adapter = this.adapter
binding.rv1.layoutManager = LinearLayoutManager(this)
}
private fun fab_lick(){
binding.fabAdd
.setOnClickListener{
val intent = Intent(this, FormularioProdutoActivity::class.java)
startActivity(intent)
}
adapter.quandoClicaEmEditar = {
Log.i("teste", "configuraRecyclerView: Editar $it")
}
adapter.quandoClicaEmRemover = {
Log.i("teste", "configuraRecyclerView: Remover $it")
}
}
}