Olá, meu projeto estava indo bem, até não abrir a tela de detalhes. O app não crasha, só não abre mesmo
link do github: https://github.com/takt1/Orgs
Olá, meu projeto estava indo bem, até não abrir a tela de detalhes. O app não crasha, só não abre mesmo
link do github: https://github.com/takt1/Orgs
Olá, Juan! Pelo que entendi, você está tendo problemas para abrir a tela de detalhes do seu aplicativo. Vamos tentar resolver isso juntos!
Primeiramente, pelo que foi descrito na aula, você precisa implementar um listener no adapter do RecyclerView
para acessar o produto clicado e abrir a tela de detalhes do produto. Aqui está um exemplo de como você pode fazer isso:
class SeuAdapter : RecyclerView.Adapter<SeuAdapter.ViewHolder>() {
//...
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
init {
itemView.setOnClickListener {
val position = adapterPosition
if (position != RecyclerView.NO_POSITION) {
val item = getItem(position)
val intent = Intent(itemView.context, DetalhesProdutoActivity::class.java)
intent.putExtra("produto", item)
itemView.context.startActivity(intent)
}
}
}
}
//...
}
Este exemplo considera que seu objeto Produto
é Parcelable
. Se não for, você precisará torná-lo Parcelable
para poder passá-lo entre as Activities
. Aqui está um exemplo de como você pode fazer isso:
@Parcelize
data class Produto(
val nome: String,
val descricao: String,
val valor: Double
) : Parcelable
Depois, na sua Activity
de detalhes do produto, você precisa receber o objeto Produto
passado como extra. Aqui está um exemplo de como você pode fazer isso:
class DetalhesProdutoActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detalhes_produto)
val produto = intent.getParcelableExtra<Produto>("produto")
if (produto == null) {
finish()
return
}
// use o objeto produto para atualizar a UI
}
}
Por fim, certifique-se de que a Activity
de detalhes do produto está declarada no seu arquivo AndroidManifest.xml
:
<activity android:name=".DetalhesProdutoActivity" />
Revisando, essas são as etapas gerais que você precisa seguir para implementar a funcionalidade de abrir a tela de detalhes ao clicar em um item do RecyclerView
. Se você já fez tudo isso e ainda está tendo problemas, pode ser útil verificar se há algum erro no log do Logcat.
Espero ter ajudado e bons estudos!
Oi Matheus, eu já havia feito tudo isso, porém sua dica me fez revisar o código e perceber que havia uma palavra que não era para estar ali, esqueci que o apply do Intent já o referenciava sem necessitar chamá-lo:
Código anterior:
private fun configuraRecycler() {
val recyclerView = binding.activityListaProdutosRecyclerView
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(this)
adapter.produtoListaListener = {
val intent = Intent(
this,
DetalhesProdutoActivity::class.java
).apply { this: Intent
intent.putExtra(CHAVE_PRODUTO, it)
}
startActivity(intent)
}
}
Código correto:
private fun configuraRecycler() {
val recyclerView = binding.activityListaProdutosRecyclerView
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(this)
adapter.produtoListaListener = {
val intent = Intent(
this,
DetalhesProdutoActivity::class.java
).apply { this: Intent
putExtra(CHAVE_PRODUTO, it)
}
startActivity(intent)
}
}
Falta de atenção minha hehe