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
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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