1

startActivity() を動的に呼び出す方法はありますか?

目的は、次のようなものを持つことです。

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

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

前もって感謝します。

4

1 に答える 1

1

使用startActivityしようとしているメソッドには、次のような署名があります。

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

ご覧のとおり、具体化された型パラメーターを使用しています。その結果、関数を別のヘルパー関数でラップしたい場合、インライン化しすぎて、具体化された型パラメーターを使用する必要があります。さらに重要なことは、ネストされた関数/ラムダもインライン化を使用する必要があるということです-これは真実でonClickはありません。

intentFor<T>ただし、次のようにして目標を達成できると思います。

inline fun <reified T : Activity> Context.buttonGoTo() = UI {
    val target = intentFor<T>()
    button() {
        onClick {
            startActivity(target)
        }
    }
}.view
于 2016-07-25T06:42:27.953 に答える