繁体   English   中英

如何在回收站视图中单击按钮打开片段

[英]How to open a fragment with button click in recycler view

class Crypto: Fragment(R.layout.fragment_crypto) { private lateinit var recyclerView: RecyclerView private lateinit var cryptolist: ArrayList<crypro_data> private lateinit var cryptoAdapter: cryptoAdapter override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated (视图,savedInstanceState)recyclerView = view.findViewById(R.id.recyclerview)recyclerView.setHasFixedSize(真)recyclerView.layoutManager = LinearLayoutManager(活动)

    cryptolist = ArrayList()

    cryptolist.add(crypro_data(R.drawable.ic_baseline_history_24,"dolar"))
    cryptolist.add(crypro_data(R.drawable.ic_baseline_history_24,"lari"))
    cryptolist.add(crypro_data(R.drawable.ic_baseline_history_24,"lira"))
    cryptolist.add(crypro_data(R.drawable.ic_baseline_history_24,"sterlingi"))
    cryptolist.add(crypro_data(R.drawable.ic_baseline_history_24,"dolar"))
    cryptolist.add(crypro_data(R.drawable.ic_baseline_history_24,"lari"))
    cryptolist.add(crypro_data(R.drawable.ic_baseline_history_24,"lira"))
    cryptolist.add(crypro_data(R.drawable.ic_baseline_history_24,"sterlingi"))
    cryptolist.add(crypro_data(R.drawable.ic_baseline_history_24,"dolar"))
    cryptolist.add(crypro_data(R.drawable.ic_baseline_history_24,"lari"))

    cryptoAdapter =  cryptoAdapter(cryptolist)
    recyclerView.adapter = cryptoAdapter

}

}

这是我在有 recyclerview 的片段上的代码

我想知道是否可以在点击 recyclerview 中的任何项目时打开相同的片段。

但每个项目都必须将其唯一 ID 传输到打开的片段,以便找出单击了哪个按钮。

要在 RecyclerView 中通过单击按钮打开 Fragment,您可以在 RecyclerView 适配器中的按钮上使用 setOnClickListener 方法,并在您创建适配器的 Fragment 中使用点击侦听器。

以下是如何在适配器中执行此操作的示例:

class ImageAdapter(private var imageModel: List<ImageModel>) : RecyclerView.Adapter<ImageAdapter.PostViewHolder>() {
...
//The click listener
var onButtonClick: ((ImageModel) -> Unit)? = null

override fun onBindViewHolder(holder: PostViewHolder, position: Int) {
    ...
    //Set the click listener on the button you have in your RV element
    holder.itemView.button.setOnClickListener {
        //Clicked
        onButtonClick?.invoke(imageModel[position])
    }
}
}

在您的片段中,您可以实现侦听器并将其设置为适配器并处理转换:

lass YourFragment : Fragment() {
...

private val imageAdapter = ImageAdapter(listOf())
...

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    imageAdapter.onButtonClick = { imageModel ->
        // Handle the button click here
        // open a new fragment
        val fragment = AnotherFragment()
        val fragmentManager = childFragmentManager
        val fragmentTransaction = fragmentManager.beginTransaction()

        // Pass object as extra
        bundle.putParcelable("key", imageModel)
        fragment.arguments = bundle

        fragmentTransaction.replace(R.id.fragment_container, fragment)
        fragmentTransaction.addToBackStack(null)
        fragmentTransaction.commit()
    }
  }
}

在 AnotherFragment 中,您可以从 onCreate 方法中的 arguments 属性中检索 object:

class AnotherFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // Retrieve object from extra
    val myObject = arguments?.getParcelable<MyObject>("key")
 }
}

在此示例中,class ImageModel 应实现 Parcelable 接口。

快乐编码!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM