【问题标题】:How to create a button in Kotlin that opens a new activity (Android Studio)?如何在 Kotlin 中创建一个打开新活动(Android Studio)的按钮?
【发布时间】:2017-12-19 20:47:07
【问题描述】:

您好,我正在使用 Android Studio 和 Kotlin 语言制作应用,但无法让我的按钮打开新活动。我在我的 xml 文件中创建了按钮,但我找不到如何在 MainActivity.kt 中声明它以及如何创建将我带到新活动的 OnClicklistener 的 KOTLIN 语法。我在清单中也定义了新的活动,我想我只需要关于如何从 MainActivity.kt 实际切换到 secondActivity.kt 的语法帮助。任何帮助表示赞赏。

【问题讨论】:

  • 在 Kotlin 中的操作方式与 Java 相同。也许你需要先学习 android 而不是 kotlin。

标签: android android-studio kotlin kotlin-android-extensions kotlin-extension


【解决方案1】:

您可以添加onclick 事件监听器,如下所示。

 button1.setOnClickListener(object: View.OnClickListener {
    override fun onClick(view: View): Unit {
        // Handler code here.
        val intent = Intent(context, DestActivity::class.java);
        startActivity(intent);
    }
})

或者你可以使用简化形式

   button1.setOnClickListener {
    // Handler code here.
    val intent = Intent(context, DestActivity::class.java)
    startActivity(intent);
   }

【讨论】:

  • 感谢您的回复,但是,如果我将上面的代码复制粘贴到我的 MainActivity.kt 文件中,几乎整个事情都会被错误消息覆盖,指出 startActivity、Intent 和 context 都是未解析的引用并且最终/意图具有预期的变量。它还在第一行说需要一个成员声明。知道有什么问题吗?编辑:最重要的是,如果我使用简化形式,它会说函数声明不再有名称。
  • 我假设您的按钮变量名称是 button1 并且 context 变量具有活动上下文(否则只需使用 thisYourClassName.this )。
  • 在 onCreate() 和通过 findViewById() 获得 button1 的引用后添加此代码
  • 非常感谢您到目前为止的帮助,但我仍然有一些问题,我已经获得了 button1 的引用并将所有内容都放在了 onCreate() 但行 final Intent intent = new Intent (this, secondActivity.class);说 final 仍然是一个未解析的引用并需要一个变量, Intent 需要一个变量(我应该在这里使用 secondActivity 作为意图还是什么?),“new”是一个未解析的引用,并且 secondActivity 是一个意外的标记.
  • 谢谢!最后一个错误说 java 是 "secondActivity::class.java" 中未解决的引用,我也尝试用 class.kotlin 替换它,但这似乎也不起作用。
【解决方案2】:

布局xml文件中的按钮

        <Button
            android:id="@+id/btn_start_new_activity"
            android:text="New Activity"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

用于在Kotlin Activity 文件中声明它

var btn_new_activity = findViewById(R.id.btn_start_new_activity) as Button

Onclicklistener设置为按钮,点击按钮时启动新活动

    btn_new_activity.setOnClickListener {
        val intent = Intent(context, NewActivity::class.java)
        startActivity(intent);
    }

参考:Android Studio Tutorial - https://www.youtube.com/watch?v=7AcIGyugR7M

【讨论】:

    【解决方案3】:

    我建议您使用 Anko - Kotlin 的扩展 https://github.com/Kotlin/anko。 它让您以最短的方式使用意图(以及更多其他东西)。在您的情况下,它将是:

    button {
            onClick { startActivity<SecondActivity>() }
        }
    

    【讨论】:

    • 谢谢!我也会对此进行研究,我想首先弄清楚如何以原始方式进行操作,但我肯定会在以后的项目中进行研究。干杯。
    • 已弃用。使用splitties
    【解决方案4】:
    // In your method `fun onCreate(savedInstanceState: Bundle?)` add this.
    
        your_btn_id.setOnClickListener{
    
                    val intent = Intent(this, yourpagename::class.java)
                    startActivity(intent)
                }
    
    // till now if it doesn't work then, check if these two files are added or not,
    
        import android.content.Intent
        import kotlinx.android.synthetic.main.activity_otp.*
    

    //希望它会起作用。 ?

    【讨论】:

      【解决方案5】:

      您可以创建一个通用方法来启动任何活动

        inline fun<reified T> launchActivity(){
          val intent = Intent(this, T::class.java)
          startActivity(intent)
      }
      

      并且可以像这样使用

       button1.setOnClickListener {
            launchActivity<AnyActivity>()
      }
      

      获取更多关于reified的详细信息Go to Here

      【讨论】:

        【解决方案6】:

        您可以简单地在主活动中声明您的按钮,如下所示:

        val button = findViewById<Button>(R.id.button)
                button.setOnClickListener(this);
        

        然后在 clicklistener 中启动新的活动:

        override fun onClick(p0: View?) {
                val intent = Intent(this, activity::class.java)
                startActivity(intent)
            }
        

        【讨论】:

          【解决方案7】:

          我必须在 build.gradle 的插件中添加第一个 id 'kotlin-android-extensions'。 之后在 OnCreate Button.setOnClickListener { }

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-12-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-26
            • 1970-01-01
            • 1970-01-01
            • 2017-07-25
            相关资源
            最近更新 更多