android - 在 Kotlin 中设置 startActivity() 时类型不匹配

标签 android kotlin android-recyclerview type-mismatch

我是 Kotlin 的 Android 移动编程新手。我想尝试从许多教程和 Android 移动编程学习中制作自己的电影列表用于我的实验。

所以,我想尝试使从电影列表开始的 Explicit Intent,其中一个被点击到我点击的电影信息中。

在 MainActivity.kt 中从 JSON 获取电影数据集后,我将 MainActivity.kt 中的以下代码用于 MovieAdapter 类 (MovieAdapter.kt)

val customAdapter = MovieAdapter(moviePoster, movieTitle, movieYear, movieGenre, movieDirectors, movieRunTime, movieRating, movieActors, movieOverview, this@MainActivity)
recyclerView.setAdapter(customAdapter)

这是 MovieAdapter 类 (MovieAdapter.kt)

class MovieAdapter(var moviePoster: ArrayList<String>,
                   var movieTitle: ArrayList<String>,
                   var movieYear: ArrayList<String>,
                   var movieGenre: ArrayList<String>,
                   var movieDirectors: ArrayList<String>,
                   var movieRunTime: ArrayList<String>,
                   var movieRating: ArrayList<String>,
                   var movieActors: ArrayList<String>,
                   var movieOverview: ArrayList<String>, var ctx: Context) : RecyclerView.Adapter<MovieAdapter.MyViewHolder>()

然后在 MovieAdapter.kt(MovieAdapter 类)中,如下面的代码

override fun onBindViewHolder(holder: MyViewHolder, position: Int)
{
    holder.moviePoster.tag = moviePoster[position]
    holder.movieTitle.text = movieTitle[position]
    holder.movieYear.text = movieYear[position]
    holder.movieGenre.text = movieGenre[position]


    val moviePosterDetail = moviePoster[position]
    val movieTitleDetail = movieTitle[position]
    val movieYearDetail = movieYear[position]
    val movieGenreDetail = movieGenre[position]
    val movieDirectorDetail = movieDirectors[position]
    val movieTimeDetail = movieRunTime[position]
    val movieRatingDetail = movieRating[position]
    val movieActorsDetail = movieActors[position]
    val movieDescriptionDetail = movieOverview[position]


    holder.itemView.setOnClickListener{

        Intent(ctx, MovieDetail::class.java).also {

            it.putExtra("moviePoster", moviePosterDetail)
            it.putExtra("movieTitle", movieTitleDetail)
            it.putExtra("movieYear", movieYearDetail)
            it.putExtra("movieGenre", movieGenreDetail)
            it.putExtra("movieDirector", movieDirectorDetail)
            it.putExtra("movieTime", movieTimeDetail)
            it.putExtra("movieRating", movieRatingDetail)
            it.putExtra("movieActors", movieActorsDetail)
            it.putExtra("movieDescription", movieDescriptionDetail)

            startActivity(it)

        }

    }
}

在startActivity(it)部分,下面有错误

Type mismatch. Required: Context Found: Intent No value passed for parameter 'intent' No value passed for parameter 'options'

但在其他文件中,当执行 startActivity(it) 部分时(在 MainActivity.kt 文件中),这里没有检测到错误。

那么,为什么会发生这种情况,我该怎么做呢? 如果我必须在 startActivity() 中使用 context 和 options 参数,我应该如何填充 startActivity() 函数中的参数?

最佳答案

我无法运行基于 XML/View 的项目 atm,但您调用的 startActivity 可能是 ContextCompat 或其他东西。

因为你的参数名称是

var ctx: Context

你传递 Activity 实例的地方

this@MainActivity

您可以尝试使用 ctx 参数调用 startActivity 吗?

Intent(ctx, MovieDetail::class.java).also {

    ...
    ...

    ctx.startActivity(it)
}

关于android - 在 Kotlin 中设置 startActivity() 时类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74677953/

相关文章:

java - 带有 viewModel 和 Livedata 的 RecyclerView 适配器

Android onActivityResult 数据参数使用相机返回 null

java - Android 中的 JSON 到 Java 对象不适用于 GSON

xml - Android Studio 中的通用 View 绑定(bind)

kotlin - Kotlin 有 'trait' 类型吗?

java - 在 RecyclerView 的 OnBindViewHolder 中更改 View 的文本颜色或背景颜色

Android 完成父 Activity

android - 将 Realm-gradle-plugin :1. 0.0 添加到 Android Studio 项目时,Gradle 无法同步

android - 底部工作表对话框高度

android - RecyclerView 添加 EmptyView