我在里面 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)
}
你必须传递 Context
在适配器结构中
class HomeAdapter(val context: Context?) : RecyclerView.Adapter<HomeAdapter.ViewHolder>() {...}
无论你想在哪里添加新的片段,都可以添加这段代码。
FragmentManager fm = ((AppCompatActivity)context).getSupportFragmentManager();
fm.beginTransaction()
.add(R.id.main_fragment, new GalleryFragment())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack("GallaryFragment")
.commit();
希望能帮到你