大佬教程收集整理的这篇文章主要介绍了为什么在创建 Intent 时会出现此错误,并且无法从第二个屏幕上 RecyclerView 中的 Firebase 传递数据,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我标记了片刻之后添加(添加到代码中)的部分 当应用程序运行时,数据已成功下载 从数据库。我可能会错误地尝试传递此信息 到另一个屏幕。我试图找到一个连接到 数据库并将recicler的数据转发到另一个屏幕上,但是 没有成功,或者他们使用的是 Java,我不太了解。
class BookDescription : AppCompatActivity() {
overrIDe fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceStatE)
setContentVIEw(R.layout.activity_book_description)
var books = intent.getserializableExtra("noti") as Book //added to code
GlIDe.with(this).load(books.imageUrl).into(bookimg2)// added to code
nameTxt2.text = books.name //added to code
autorTxt2.text = books.writer //added to code
}
}
class MainActivity : AppCompatActivity() {
private lateinit var adapter : Adapter
private val viewmodel by lazy { viewmodelProvIDers.of(this).get(Mainviewmodel::class.java)}
overrIDe fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceStatE)
setContentVIEw(R.layout.activity_main)
setUpRecyclerVIEw()
}
private fun setUpRecyclerVIEw(){
adapter = Adapter(this){
startBookDescription()
}
recycle.layoutManager = GrIDLayoutManager(this,2)
recycle.adapter = adapter
observerData()
}
fun observerData(){
viewmodel.fetchUserData().observe(this,Observer{
adapter.setListdata(it)
adapter.notifyDataSetChanged()
})
}
private fun startBookDescription(){
val intent = Intent (this,BookDescription::class.java )
startActivity(intent)
}
}
class Adapter(private val context: Context,private val onItemCliked: () -> Unit ) : RecyclerVIEw.Adapter<Adapter.Holder>() {
private var dataList = mutablelistof<Book>()
fun setListdata(data: MutableList<Book>){
dataList = data
}
inner class Holder(itemVIEw : VIEw) : RecyclerVIEw.VIEwHolder(itemVIEw){
fun bindVIEw(book: Book,onItemClicked: () -> Unit){
GlIDe.with(context).load(book.imageUrl).into(itemVIEw.bookimg)
itemVIEw.nameTxt.text = book.name
itemVIEw.autorTxt.text= book.writer
itemVIEw.setonClickListener { onItemClicked.invoke() }
itemVIEw.bookimg.setonClickListener(VIEw.onClickListener { //added
val intent = Intent(context,BookDescription::class.java)//added to code
intent.putExtra("noti",book)//added to code
context.startActivity(intent)//added to code
})
}
}
overrIDe fun onCreateVIEwHolder(parent: VIEwGroup,vIEwType: int): Holder {
val vIEw = LayoutInflater.from(context).inflate(R.layout.book_format,parent,false )
return Holder(vIEw)
}
overrIDe fun onBindVIEwHolder(holder: Holder,position: int) {
val book = dataList[position]
holder.bindVIEw(book,onItemCliked)
}
overrIDe fun getItemCount(): Int {
return if (dataList.size> 0){
dataList.size
}else{
0
}
}
}
问题出在这里:
intent.putExtra("noti",book)
book
变量的类型为 Book
,它显然不是 Parcelable
或 serializable
类。您必须在 Book
类中实现这两个接口之一才能将其添加到 Intent
或 Bundle
。
假设 Book
由简单的数据类型(String
、Int
等)组成,那么您可以使用 @Parcelize
批注轻松实现 {{1} }.更多信息:https://developer.android.com/kotlin/parcelize
在您的 Parcelable
方法中,您有以下代码块:
bindView()
然而,你实际上并没有对这个 val intent = Intent(context,BookDescription::class.java)//added to code
intent.putExtra("noti",book)//added to code
context.startActivity(intent)//added to code
})
做任何事情;你从另一个地方开始你的活动:
Intent
您必须将 private fun startBookDescription(){
val intent = Intent (this,BookDescription::class.java )
startActivity(intent)
}
实例传递给此方法(通过 Book
)。这将需要对适配器的点击侦听器参数进行相应的类型更改。
以上是大佬教程为你收集整理的为什么在创建 Intent 时会出现此错误,并且无法从第二个屏幕上 RecyclerView 中的 Firebase 传递数据全部内容,希望文章能够帮你解决为什么在创建 Intent 时会出现此错误,并且无法从第二个屏幕上 RecyclerView 中的 Firebase 传递数据所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。