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として除外しない
アクティビティを開始するための拡張機能は次のとおりです。
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を使用してください。
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)