动态使用AnkoComponent< *> .startActivity()

时间:2016-07-24 19:53:56

标签: android generics kotlin start-activity anko

有没有办法动态调用startActivity()?

目的是获得如下内容:

fun <T: Activity> buttonGoTo(): android.widget.Button {

    return button() {
        // do stuff
        onClick {startActivity<T>()}
    }
}

提前致谢。

1 个答案:

答案 0 :(得分:1)

您尝试使用的startActivity方法具有以下签名:

inline fun <reified T: Activity> Fragment.startActivity(vararg params: Pair<String, Any>)

如您所见,它使用reified types parameters。结果是,如果你想将函数包装在另一个辅助函数中,它必须太内联并使​​用reified类型参数。更重要的是,它需要嵌套函数/ lambda才能使用内联 - 在onClick的情况下,这不是真的。

但是我认为您仍然可以通过intentFor<T>实现目标:

inline fun <reified T : Activity> Context.buttonGoTo() = UI {
    val target = intentFor<T>()
    button() {
        onClick {
            startActivity(target)
        }
    }
}.view