Есть ли способ вызвать startActivity () динамически?
Цель состояла бы в следующем:
fun <T: Activity> buttonGoTo(): android.widget.Button { return button() { // do stuff onClick {startActivity<T>()} } }
Заранее спасибо.
Метод startActivity
который вы пытаетесь использовать, имеет подпись типа:
inline fun <reified T: Activity> Fragment.startActivity(vararg params: Pair<String, Any>)
Как вы можете видеть, он использует параметры типов reified . Следствием этого является то, что если вы хотите обернуть функцию в другую вспомогательную функцию, она должна быть слишком встроенной и использовать параметры типа reified. Что еще более важно, так это то, что для вложенных функций / lambdas требуется также использовать inlining – что в случае onClick
не является истинным.
Однако я думаю, что вы все еще можете достичь своей цели с intentFor<T>
например:
inline fun <reified T : Activity> Context.buttonGoTo() = UI { val target = intentFor<T>() button() { onClick { startActivity(target) } } }.view