Я внутри onBindViewHolder
и хочу показать новый фрагмент в holder.view.setOnClickListener { }
Я передаю текущий фрагмент в моем адаптере:
class HomeAdapter(val fragment: Fragment?) : RecyclerView.Adapter<HomeAdapter.ViewHolder>() {
если я попытаюсь использовать supportFragmentManager
, ничего не произойдет, если я коснусь строки:
fragment
.requireActivity()
.supportFragmentManager
.beginTransaction()
.add(R.id.main_fragment, GalleryFragment())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack("HomeFragment")
.commit()
Однако, если я использую устарела , это сработает:
fragment
.requireFragmentManager()
.beginTransaction()
.replace(R.id.main_fragment, GalleryFragment())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack("HomeFragment")
.commit()
Я не хочу использовать устаревший. Есть ли способ исправить это?
Редактировать:
Это мой класс, где я звоню onClickListener
:
class DhikrHomeAdapter(val fragment: Fragment?, val data: Array<PreviewDhikr>) : RecyclerView.Adapter<DhikrHomeAdapter.ViewHolder>() {
override fun getItemCount(): Int {
return data.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(fragment?.requireContext())
val cell = inflater.inflate(R.layout.dhikr_row, parent, false)
return ViewHolder(cell)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val cell = holder.view
val currentDhikr = data[position]
cell.dhikrType.text = currentDhikr.dhikrType.rawValue
val img = fragment?.requireContext()?.resources!!.getIdentifier(currentDhikr.previewImage, "drawable", fragment.requireContext().packageName)
cell.backgroundImage.setImageResource(img)
cell.setOnClickListener {
fragment
.requireFragmentManager()
.beginTransaction()
.replace(R.id.main_fragment, DhikrFragment(currentDhikr))
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack("HomeFragment")
.commit()
}
}
class ViewHolder(val view: View): RecyclerView.ViewHolder(view)
}