繁体   English   中英

无法将数据从 recyclerview 适配器传递到另一个 kotlin 片段

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM