2016-07-24 15 views
1

Gibt es eine Möglichkeit, startActivity() dynamisch aufzurufen?Dynamische Verwendung von AnkoComponent <*> .startActivity()

Der Zweck etwa wie folgt zu haben wäre:

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

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

Vielen Dank im Voraus.

+0

Sie neue Aktivität durch ein neues 'Intent' Objekt starten können. Überprüfen Sie die Android-Dokumente. – spirit

Antwort

1

Die startActivity Methode Sie zu verwenden sind versucht hat eine Signatur wie:

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

Wie Sie es verwendet reified types parameters sehen können. Die Konsequenz ist, dass, wenn Sie die Funktion in eine andere Hilfsfunktion einbinden wollen, sie zu inlined sein muss und verifizierte Typparameter verwenden soll. Was noch wichtiger ist, ist, dass es verschachtelte Funktionen/Lambdas benötigt, um Inlining zu verwenden - was im Fall von onClick nicht zutrifft.

Aber ich denke, Sie noch Ihr Ziel mit intentFor<T> wie so erreichen kann:

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