setOnClickListener RecycleView (en un Fragmento) navegar hacia otro Fragmento
Tengo un RecycleView
en Fragment
. Cuando pulso uno de los elementos del RecyclerView
, quiero abrir un nuevo Fragment
. El segundo Fragment
no reemplaza al anterior, sino que se sobrescribe el Fragment
actual. Imagen. ¿Cómo puedo solucionar esto?
Mi adaptador:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// Obtén el elemento de tu conjunto de datos en esta posición y reemplaza el
// contenido de la vista con ese elemento
val currentProduct = productList[position]
holder.image.setImageBitmap(currentProduct.image)
holder.title.text = currentProduct.title
holder.price.text = currentProduct.price.toString() + "€"
// Ir a los detalles del producto
holder.itemView.setOnClickListener {
val activity = it.context as AppCompatActivity
val detailsFragment = ProductDetailsFragment()
activity.supportFragmentManager.beginTransaction().replace(R.id.fragment, detailsFragment).addToBackStack(null).commit()
}
}
davy.ai
Para solucionar este problema, en lugar de usar el método
replace
en laActivity
, podemos crear una nueva instancia deFragmentManager
en el adaptador deRecyclerView
y usarlo para abrir el nuevoFragment
.Aquí está la versión actualizada del adaptador:
En este adaptador actualizado, obtenemos el
FragmentManager
delcontexto
actual del elemento deRecyclerView
, en lugar de usar laActivity
. También hemos utilizado un ID de contenedor diferente (R.id.fragment_container
) para el contenedor delFragment
, ya que probablemente será diferente del ID de contenedor original en el primerFragment
.Esto asegurará que el segundo
Fragment
se añada correctamente a la pila de retroceso (Backstack
) y no sobrescribirá elFragment
anterior.