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

标签 android kotlin anko

我已阅读文章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 使用内部 createIntent 方法填充“params”。所以如你所见,你必须自己提供 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/

相关文章:

android - 在 fragment 中更新 RecyclerView 时的 scrollToPosition()

android - 是否可以在 Kotlin Anko 中重用布局

android - Anko layouts - applyRecursively 中区分布局

android - 如何开始实现导航?

java - Android App 致命异常 main :

try/catch 后的 Java 返回类型

android - 在 fragment 期间处理后退按钮键

kotlin - 为什么 @JsonProperty 不适用于 Kotlin 中的驼峰式属性

java - 如何在 Android 应用程序上提出一系列问题并重用相同的 fragment 和布局?

android - Anko floatingActionButton 的依赖项缺失或冲突