程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么在创建 Intent 时会出现此错误,并且无法从第二个屏幕上 RecyclerView 中的 Firebase 传递数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决为什么在创建 Intent 时会出现此错误,并且无法从第二个屏幕上 RecyclerView 中的 Firebase 传递数据?

开发过程中遇到为什么在创建 Intent 时会出现此错误,并且无法从第二个屏幕上 RecyclerView 中的 Firebase 传递数据的问题如何解决?下面主要结合日常开发的经验,给出你关于为什么在创建 Intent 时会出现此错误,并且无法从第二个屏幕上 RecyclerView 中的 Firebase 传递数据的解决方法建议,希望对你解决为什么在创建 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)
    }
}

带有内部类 Holder 的类适配器

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 时会出现此错误,并且无法从第二个屏幕上 RecyclerView 中的 Firebase 传递数据

解决方法

问题出在这里:

intent.putExtra("noti",book)

book 变量的类型为 Book,它显然不是 Parcelableserializable 类。您必须在 Book 类中实现这两个接口之一才能将其添加到 IntentBundle

假设 Book 由简单的数据类型(StringInt 等)组成,那么您可以使用 @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,请注明来意。