我对Kotlin的Android手机编程是个新手.我想试着从许多教程中为我的实验和Android移动编程学习制作自己的电影 list .

所以,我想试着明确的意图,从电影列表开始,其中一个被点击到我点击的电影信息中.

在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)部分中,下面有一个错误

类型不匹配. 必需:上下文 找到:意向 没有为参数‘Intent’传递任何值 没有为参数‘Options’传递任何值

但在其他文件中执行startActivity(It)部件时(在MainActivity.kt文件中),此处未检测到错误.

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

推荐答案

我不能运行基于XML/View的项目自动取款机,但您正在呼叫的startActivity可能是ContextCompat或其他什么.

因为您的参数名称是

var ctx: Context

在其中传递活动的实例

this@MainActivity

您可以try 使用ctx参数来调用startActivity吗?

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

    ...
    ...

    ctx.startActivity(it)
}

Android相关问答推荐

打开平板电脑的下载文件夹中的文件,例如使用其mimeType将Intent发送到我们的应用程序

如何在Android Emulator上从物理设备接收TCP消息

使用Kotlin的SD卡

格雷德的两个星号是什么意思?非路径

在柯特林连续测量网速

Jetpack Compose-如何在进入新产品线之前删除单词?

空数据来自改装

(已解决)从最近的应用程序打开应用程序时出错

AndroidX Media3 迁移指南

制作圆形SupportMapFragment

Android Jetpack Compose全宽度抽屉优化

在模块 jetified-kotlin-stdlib-1.8.10 中发现重复的类 kotlin.random.jdk8,带有启动基准

如何绘制内边框?

Android Studio:按下前缀键:切换 Logcat 格式

在 Jetpack Compose 中单击时更改表面项目的背景 colored颜色

根据 Jetpack Compose 中的生命周期正确处理变量/函数

协程中的 Job.Cancel 与 Scope.Cancel 有什么区别?

如何在 TextInputEdit 中调整可绘制对象的大小

在 Jetpack Compose 中 Select 要省略的文本

Android Studio (Kotlin):无法启动活动