用supportFragmentManager推送新的Fragment。

问题描述 投票:0回答:1

我在里面 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)
}
java android android-fragments kotlin recycler-adapter
1个回答
0
投票

你必须传递 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();

希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.