我在 onBindViewHolder
中,我想在 holder.view.setOnClickListener { }
我正在适配器中传递当前 fragment :
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)
}
最佳答案
您必须在适配器构造中传递Context
class HomeAdapter(val context: Context?) : RecyclerView.Adapter<HomeAdapter.ViewHolder>() {...}
无论您想在何处添加新 fragment ,请添加以下代码:
FragmentManager fm = ((AppCompatActivity)context).getSupportFragmentManager();
fm.beginTransaction()
.add(R.id.main_fragment, new GalleryFragment())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack("GallaryFragment")
.commit();
希望这有帮助。
关于java - 使用 supportFragmentManager 推送新 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61420934/