Já realizei inúmeras modificações, inclusive as mostradas nos tópicos anteriores, porém nada funciona, ou ele não reconhece o clique longo, ou ele não realiza a remoção do item quando clicado. Poderiam por favor me ajudar, não consigo identificar onde estou errando ! ;/
package com.example.orgsrafael.recycletview
import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.PopupMenu
import androidx.recyclerview.widget.RecyclerView
import com.example.orgsrafael.R
import com.example.orgsrafael.database.AppDataBase
import com.example.orgsrafael.databinding.ProdutoItemBinding
import com.example.orgsrafael.extensions.carregarImagem
import com.example.orgsrafael.extensions.conversorMoedaBrasileira
import com.example.orgsrafael.model.Produto
import com.example.orgsrafael.ui.activity.CHAVE_PRODUTO_ID
import com.example.orgsrafael.ui.activity.DetalhesProdutosListaActivity
class ListaProdutosAdapter(
private val context: Context,
list: List<Produto> = emptyList(),
var clicaNoItem: (produto: Produto) -> Unit = {},
var quandoClicaEmEditar: (produto: Produto) -> Unit = {},
var quandoClicaEmRemover: (produto: Produto) -> Unit = {}
) : RecyclerView.Adapter<ListaProdutosAdapter.ViewHolder>() {
private val produtoDao by lazy {
AppDataBase.instanceDb(context).produtoDao()
}
private val listaAtualizada = list.toMutableList()
inner class ViewHolder(private val binding: ProdutoItemBinding, produto: Produto) :
RecyclerView.ViewHolder(binding.root), PopupMenu.OnMenuItemClickListener {
private lateinit var produto: Produto
init {
itemView.setOnLongClickListener {
PopupMenu(context, itemView).apply {
inflate(R.menu.menu_popup_deletar)
setOnMenuItemClickListener(this@ViewHolder)
show()
};true
}
}
fun vincula(produto: Produto) {
val nome = binding.produtoItemNome
nome.text = produto.nome
val descricao = binding.activityProdutoItemDescricao
descricao.text = produto.descricao
val valor = binding.activityProdutoItemValor
val valorEmReais: String = produto.valor.conversorMoedaBrasileira()
valor.text = valorEmReais
val viewVisibilidade = if (produto.imagem != null) {
View.VISIBLE
} else {
View.GONE
}
binding.imageView.visibility = viewVisibilidade
binding.imageView.carregarImagem(produto.imagem)
}
override fun onMenuItemClick(item: MenuItem?): Boolean {
item?.let {
if (::produto.isInitialized) {
when (it.itemId) {
R.id.menu_popup_remover -> {
quandoClicaEmRemover(produto)
}
}
}
}
return true
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(context)
val binding = ProdutoItemBinding.inflate(inflater, parent, false)
return ViewHolder(binding)
}
override fun getItemCount(): Int = listaAtualizada.size
override fun onBindViewHolder(holder: ListaProdutosAdapter.ViewHolder, position: Int) {
val produto = listaAtualizada[position]
holder.vincula(produto)
vaiParaDetalhesProdutoActivity(holder, produto)
}
private fun vaiParaDetalhesProdutoActivity(
holder: ViewHolder,
produto: Produto
) {
holder.itemView.setOnClickListener {
val intent =
Intent(holder.itemView.context, DetalhesProdutosListaActivity::class.java)
.apply {
putExtra(CHAVE_PRODUTO_ID, produto.id)
}
holder.itemView.context.startActivity(intent)
}
}
fun atualiza(produtos: List<Produto>) {
this.listaAtualizada.clear()
this.listaAtualizada.addAll(produtos)
notifyDataSetChanged()
}
}