web-dev-qa-db-ja.com

Kotlin拡張機能は、インテントエクストラを使用してアクティビティを開始します

Androidで、指定されたクラス名とインテントエクストラのリストを使用して新しいアクティビティを開始するContextのkotlin拡張関数を作成しようとしています。エクストラなしでアクティビティを正常に開始できますが、それらに問題に直面しています。

fun <T> Context.openActivity(it: Class<T>, pairs: List<Pair<String, Any>>) {
  var intent = Intent()
  pairs.forEach {
     intent.putExtra(it.first, it.second)
  }
  startActivity(intent)
}

ここでの主な問題は-> intent.putExtra()は2番目のパラメータをAnyとして除外しない

6
Saksham Khurana

アクティビティを開始するための拡張機能は次のとおりです。

inline fun <reified T : Activity> Context.openActivity(noinline extra: Intent.() -> Unit) {
      val intent = Intent(this, T::class.Java)
      intent.extra()
      startActivity(intent)
}

この関数は次のように呼び出すことができます。

openActivity<MyActivity> {
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    putExtra(LaBoxConstants.DEFAULT_LANDING, Default_Landing)
    putExtra(HomeActivity.APP_RELAUNCH, AppReLaunched)
}

注:IT ISアクティビティを開始するための推奨される方法ではありません。代わりにSTARTACTIVITYを使用してください。

1
Subho

IntentオブジェクトにはメソッドputExtra(String, Any)はありません。 Bundleオブジェクトを使用してデータを保存できます。

fun <T> Context.openActivity(it: Class<T>, bundleKey: String, bundle: Bundle) {
    var intent = Intent(this, it)
    intent.putExtra(bundleKey, bundle)
    startActivity(intent)
}

Contextオブジェクト内で呼び出すには:

val bundle = Bundle()
bundle.putString("Key", "Value") // you can put another object here
openActivity(SomeActivity::class.Java, "Bundle Key", bundle)
1
Sergey