2016-07-24 4 views
1

Existe-t-il un moyen d'appeler dynamiquement startActivity()?Utilisation dynamique de AnkoComponent <*> .startActivity()

Le but serait d'avoir quelque chose comme ce qui suit:

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

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

Merci à l'avance.

+0

vous pouvez commencer une nouvelle activité grâce à un nouveau objet 'Intent'. Vérifiez les documents Android. – spirit

Répondre

1

La méthode startActivity que vous essayez d'utiliser a une signature comme:

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

Comme vous pouvez le voir utilise reified types parameters. La conséquence est que si vous voulez envelopper la fonction dans une autre fonction d'aide, elle doit être trop soulignée et utiliser des paramètres de type réifiés. Ce qui est encore plus important, c'est que cela nécessite des fonctions/lambdas imbriquées pour utiliser inline aussi - ce qui dans le cas de onClick n'est pas vrai.

Cependant, je pense que vous pouvez encore atteindre votre objectif avec intentFor<T> comme ceci:

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