java - 使用 supportFragmentManager 推送新的 Fragment
问题描述
我在里面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();
希望这可以帮助。
推荐阅读
- sql - 在单个查询中使用多个选择语句并将结果显示为新行
- python - 如何在 peewee 中预取?
- java - 多模块spring boot项目messages.properties未加载
- python - 将变量划分在一起的问题,返回有关操作数类型和“str”的错误
- android - React native Android App 无法构建并显示以下错误
- git - 当一个已经存在的情况下如何创建一个新的 PR?
- java - 如何从我的方法中返回多个 getter?
- java - 需要帮忙!Spring Boot 错误:Unsatisfied DependancyException:创建名称为“”的 bean 时出错
- compiler-construction - 此类编程行为的术语
- ipython - ipython 魔术命令中 % 和 %% 的区别