[英]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.