【发布时间】:2021-02-10 02:48:41
【问题描述】:
我有一个包含 RecyclerView 的片段。通过这个 RecyclerView,我希望单击任何视图以打开另一个片段(其中包含不同的回收器视图)。 RecyclerView 的每个视图都包含一个图片 URL 和一些文本。我希望将这两个都传递给第二个片段,以便我可以在 ImageView 和 TextView 中使用它。
我已经设法使用 RecyclerView 适配器打开了第二个片段,但我在将数据从 RecyclerView 传递到我的第二个片段时遇到了困难。
这是我的代码:
RecyclerView 适配器
class ManuAdapter(private val manu: List<Manufacturers>) :
RecyclerView.Adapter<ManuAdapter.ViewHolder>() {
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val mpos = manu[position]
Picasso.get().load(mpos.bgphoto).into(holder.image)
holder.manufacturer.text = mpos.manufacturer
holder.itemView.setOnClickListener {
val activity = it.context as AppCompatActivity
CarListFragment.newInstance(mpos.manufacturer)
Timber.e("The string is: ${mpos.manufacturer}")
activity.supportFragmentManager.beginTransaction()
.replace(R.id.frameLayout, CarListFragment())
.addToBackStack(null)
.commit()
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.manu_row, parent, false)
return ViewHolder(view)
}
override fun getItemCount() = manu.size
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val image: ImageView = itemView.manu_photo
val manufacturer: TextView = itemView.manufacturer
}
}
我尝试向其发送信息的片段
class CarListFragment : Fragment() {
companion object {
private const val ARG_TEXT = "myFragment_text"
fun newInstance(text: String): CarListFragment {
val args = Bundle()
args.putString(ARG_TEXT, text)
val fragment = CarListFragment()
fragment.arguments = args
return fragment
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val root = inflater.inflate(R.layout.fragment_car_list, container, false)
//RecyclerView in the second fragment
val carsRepository = CarsRepository().getAllCars()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
root.recycler_view.apply {
layoutManager = LinearLayoutManager(activity)
adapter = CarsAdapter(it)
root.loadingicon.visibility = View.GONE
root.loadingtext.visibility = View.GONE
}
}, {
})
val index = arguments?.getString(ARG_TEXT,"")
Timber.e("index is: $index")
root?.manu_name?.text = index
return root
}
}
单击 RecyclerView 中的视图后,我的 Adapter 类中的日志语句显示正确的字符串被放入 newInstance 构造函数中。但是,在我的第二个片段中,我的 index 日志语句显示它为空。
【问题讨论】:
-
你可以搜索片段交互,你会找到它。基本上是通过回调。
-
@AndroidKiller 好的,我会看看是否能找到有关回叫的任何信息。谢谢
标签: android kotlin android-fragments android-recyclerview