[英]Can't pass data from recyclerview adapter to another kotlin fragment
我正在尝试从活动转移到片段
在旧的活动应用程序中,当用户单击项目时,他将使用项目数据进行新活动
现在我在片段中需要同样的东西
这是我的适配器代码
override fun onBindViewHolder(holder: PhotosHolder, position: Int) {
val productPhoto = photosArrayList[position]
val key = productPhoto.key
val name = productPhoto.name
val price = productPhoto.price
val photo = productPhoto.photo
val photo2 = productPhoto.photo2
val photo3 = productPhoto.photo3
val link = "http://suleimanmf.com/Photos/"
holder.key.text = key
holder.name.text = name
holder.price.text = price
holder.photo = photo
holder.photo2 = photo2
holder.photo3 = photo3
holder.container.setOnClickListener {
goToProductInfo(productPhoto)
}
}
private fun goToProductInfo(info: Photo) {
val photosFragment = PhotosFragment()
val bundle = Bundle()
bundle.putString("key", info.key)
bundle.putString("name", info.name)
bundle.putString("price", info.price)
bundle.putString("photo", info.photo)
bundle.putString("photo2", info.photo2)
bundle.putString("photo3", info.photo3)
photosFragment.arguments = bundle
(context.applicationContext as MainActivity).supportFragmentManager.beginTransaction()
.apply {
replace(R.id.nav_host_fragment_content_main, photosFragment).addToBackStack(null)
commit()
}
// Old activity
/**
val intent = Intent(context, ProductInfoActivity::class.java)
intent.putExtra("key", info.key)
intent.putExtra("name", info.name)
intent.putExtra("price", info.price)
intent.putExtra("photo", info.photo)
intent.putExtra("photo2", info.photo2)
intent.putExtra("photo3", info.photo3)
startActivity(context, intent, null)
*/
}
}
当我单击该项目时,我收到此错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.suleimanmf.gazarcustomers, PID: 5389
java.lang.ClassCastException: android.app.Application cannot be cast to androidx.appcompat.app.AppCompatActivity
at com.suleimanmf.gazarcustomers.ui.gallery.adapter.PhotosAdapter.goToProductInfo(PhotosAdapter.kt:97)
at com.suleimanmf.gazarcustomers.ui.gallery.adapter.PhotosAdapter.onBindViewHolder$lambda-0(PhotosAdapter.kt:80)
对不起我的英语不好
提前致谢
主要问题是您正在获取应用程序上下文并将其转换为 MainActivity 这是不可能的,因为名称声明它只是应用程序上下文。 实际上,当您想要使用片段时,唯一负责将片段保存在内部的组件是活动实例。 因此,您唯一需要做的就是替换以下代码行:
(context.applicationContext as MainActivity).supportFragmentManager.beginTransaction()
.apply {
replace(R.id.nav_host_fragment_content_main, photosFragment).addToBackStack(null)
commit()
}
使用以下代码行:
(context as MainActivity).supportFragmentManager.beginTransaction()
.apply {
replace(R.id.nav_host_fragment_content_main, photosFragment).addToBackStack(null)
commit()
}
然后您的代码将正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.