Kotlin Android 启动新 Activity

新手上路,请多包涵

我想在 Android 上开始另一个活动,但出现此错误:

请指定构造函数调用;分类器“Page2”没有伴随对象

在实例化 Intent 类之后。我应该怎么做才能纠正错误?我的代码:

 class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun buTestUpdateText2 (view: View) {
        val changePage = Intent(this, Page2)
        // Error: "Please specify constructor invocation;
        // classifier 'Page2' does not have a companion object"

        startActivity(changePage)
    }

}

原文由 J Adonai Dagdag 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

要在 java 中启动 Activity 我们编写了 Intent(this, Page2.class) ,基本上你必须在第一个参数中定义 Context 在第二个参数中定义目标类。根据源代码中的 Intent 方法-

  public Intent(Context packageContext, Class<?> cls)

如您所见,我们必须通过 Class<?> 输入第二个参数。

通过编写 Intent(this, Page2) 我们从未指定我们将通过课程,我们试图通过 class 类型,这是不可接受的。

在 kotlin 中使用 ::class.java 替代 .class 。使用以下代码启动您的 Activity

 Intent(this, Page2::class.java)

例子 -

 val intent = Intent(this, NextActivity::class.java)
// To pass any data to next activity
intent.putExtra("keyIdentifier", value)
// start your next activity
startActivity(intent)

原文由 Rahul 发布,翻译遵循 CC BY-SA 3.0 许可协议

扩展功能

fun Activity.showToast(message: String, toastLength: Int){
    //LENGTH_SHORT = 0;
    //LENGTH_LONG = 1;
    Toast.makeText(this, message, toastLength).show()
}

fun Fragment.showToast(message: String, toastLength: Int){
    //LENGTH_SHORT = 0;
    //LENGTH_LONG = 1;
    Toast.makeText(requireContext(), message, toastLength).show()
}

fun Context.launchActivity(
    cls: Class<*>,
    flags: Int = 0,
    intentTransformer: Intent.() -> Unit = {}
) {
    val intent = Intent(this, cls).apply {
        addFlags(flags)
        intentTransformer()
    }
    this.startActivity(intent)
}

在活动通话中

showToast("message to be shown", 1)

在片段调用中

showToast("message to be shown", 1)

从任何地方开始活动

 launchActivity(MainActivity::class.java, Intent.FLAG_ACTIVITY_NEW_TASK)

Kotlin 扩展功能

原文由 AllanRibas 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题