gpt4 book ai didi

android - 如何使用 org.jetbrains.anko.startActivity 来优化 startActivity 功能?

转载 作者:搜寻专家 更新时间:2023-11-01 08:22:22 27 4
gpt4 key购买 nike

我已阅读文章https://github.com/Kotlin/anko/wiki/Anko-Commons-%E2%80%93-Intents .

我可以使用 startActivity(intentFor<SomeOtherActivity>("id" to 5).singleTop())打开一个新的 Activity 。

代码A由Android Studio 3.0.1自动从Java转换而来。我可以用 openActivity(applicationContext, UIBuy::class.java) 调用它.

如何使用 org.jetbrains.anko.startActivity优化功能?谢谢!

顺便说一句,代码 B 是错误的!

代码A

fun openActivity(mContext: Context, myClass: Class<*>) {
val intent = Intent().setClass(mContext, myClass)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK

mContext.startActivity(intent)
}

代码 B

fun openActivity(mContext: Context, myClass: Class<*>) {   
startActivity<myClass>().FLAG_ACTIVITY_NEW_TASK
}

最佳答案

为了优化,您可以使用此代码:

startActivity(intentFor<YourActivity>().newTask())

其中 intentFor 是 Anko 的函数。

Anko 的 startActivity() 的问题在于它不允许您设置标志。您只能传递要放置在 Bundle 中的参数。这是此功能的实现:

inline fun <reified T: Activity> Context.startActivity(vararg params: Pair<String, Any?>) =
AnkoInternals.internalStartActivity(this, T::class.java, params)

并且 internalStartActivity 在内部使用填充了“params”的 createIntent 方法。因此,如您所见,您必须自己提供 Intent。

编辑:

要创建 openActivity 方法,您可以使用内联方法让您使用类泛型。

正如评论中提到的,有不同的方式传递上下文:

(Context的扩展函数)

inline fun <reified T : Activity>Context.openActivity() {
startActivity(intentFor<T>().newTask())
}

或者(将上下文作为参数传递)

inline fun <reified T : Activity>openActivity(context: Context) {
context.startActivity(intentFor<T>().newTask())
}

或者(如果有的话,在父 Activity 中使用)

inline fun <reified T : Activity>openActivity() {
startActivity(intentFor<T>().newTask())
}

Here您会发现更多关于内联函数和具体化类型参数的信息。但正如您所见 - 建议的解决方案与原始 Anko 方法非常相似。

关于android - 如何使用 org.jetbrains.anko.startActivity 来优化 startActivity 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49482985/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com