Appel de la méthode de Kotlin classe
J'ai un util Kotlin classe où j'ai mis de la barre d'outils de titre, masquer ou afficher la barre d'outils dépend du fragment:
class MyToolbarUtils() {
fun hideToolbar(activity: Activity) {
(activity as MainActivity).supportActionBar!!.hide()
}
fun showToolbar(activity: Activity, tag: String) {
setToolbarTitle(tag, activity)
(activity as MainActivity).supportActionBar!!.show()
}
fun setToolbarTitle(tag: String, activity: Activity) {
var title = ""
when (tag) {
"Main_fragment" -> title = activity.resources.getString(R.string.Main_screen)
"Add_note" -> title = activity.resources.getString(R.string.Add_note)
}
activity.title = title
}
}
comment appeler showToolbar(...) à partir de Fragment?
J'ai juste essayé de MyToolbarUtils.showToolbar(..)
mais il peut ne pas être possible
seule façon que j'ai trouver est:
val setToolbarTitle = MyToolbarUtils()
setToolbarTitle.showToolbar(activity, tag)
mais il doit y avoir une meilleure façon de le faire..
Ne Kotlin ont des méthodes statiques? Si non, ce que vous avez fait preuve d'un sens
Si l'ensemble de ces ne fonctionnent qu'avec une classe,
Vous avez demandé un xy question ... vous avez décidé sur une réponse à un problème de programmation et ensuite, demande de l'aide à l'aide de pré-décidé de répondre. Mais dans ce cas, votre réponse n'est pas correcte du tout. Idiomatiques Kotlin ne serait pas l'utilisation de la statique ou de l'objet de déclarations dans un cas comme cela, mais au lieu d'utiliser stackoverflow.com/a/39499145/3679676
Si l'ensemble de ces ne fonctionnent qu'avec une classe,
MainActivity
pourquoi sont-ils tout simplement pas les méthodes de cette classe?Vous avez demandé un xy question ... vous avez décidé sur une réponse à un problème de programmation et ensuite, demande de l'aide à l'aide de pré-décidé de répondre. Mais dans ce cas, votre réponse n'est pas correcte du tout. Idiomatiques Kotlin ne serait pas l'utilisation de la statique ou de l'objet de déclarations dans un cas comme cela, mais au lieu d'utiliser stackoverflow.com/a/39499145/3679676
OriginalL'auteur Stepan | 2016-09-14
Vous devez vous connecter pour publier un commentaire.
Convertir votre classe dans un objet qui est censé fonctionner de façon similaire à java méthodes statiques.
Vous pouvez obtenir plus d'infos ici: https://kotlinlang.org/docs/reference/object-declarations.html#object-declarations
alors comment appeler cette fonction à partir de fragment et de l'adaptateur ??
ou à l'aide de l'exemple ci-dessus...
MyToolbarUtils.showToolbar()
. OP de mettre cela dans sa questionOriginalL'auteur ilya.dorofeev
Sonne comme
MyToolbarUtils
devrait être un l'objet de la déclaration au lieu d'une classe.Une autre façon serait de déclarer des fonctions à l'intérieur de cette classe sur le premier niveau dans un fichier (et non pas à l'intérieur de toute la classe) et il suffit de se référer à eux par leur simple nom.
OriginalL'auteur Alexander Udalov
Réponses des autres à la façon de faire de vos fonctions se sentir comme des méthodes statiques, mais pour ce cas d'utilisation, vous avez un plus idiomatiques option.
Extension de fonctions dans Kotlin remplacer statique de l'utilitaire de classes en Java:
Depuis tous de votre prise de fonctions de une
Activity
en tant que paramètre, pourquoi ne pas utiliser fonctions d'extension et de les faire prolonger laActivity
ouMainActivity
classe à la place?Maintenant ils sont tous dans le cadre de votre
MainActivity
ouActivity
classes (lesthis
est maintenant une instance de l'une de celles-ci), vous n'avez pas à aller chasser pour eux dans certains autreActivityUtils
classe. Chaque fois que vous êtes à l'intérieur de la classe d'activité, vous pouvez tout simplement:ou de tout autre endroit où vous avez une référence à une activité:
Aussi noter que j'ai nettoyé un peu le code et utilisé
quand
comme une expression pour définir le titre, et également la suppression devar
(c'est rare quand vous avez besoin d'unvar
, il faut donc toujours penser à la façon de travailler avecval
). Et comme une expression de lawhen
aurez besoin d'unelse
clause, alors j'ai fait la même chose que vous avez par défaut""
chaîne vide.Alternative, comme les Méthodes de la Classe:
Depuis tous les 3 méthodes nécessitent tous une instance de
MainActivity
(basé sur leur casting), pourquoi ne pas les mettre enMainActivity
que les fonctions de membres.Et de les appeler de toute référence à
MainActivity
.Alternative que l'Objet de la Déclaration:
Enfin, comme suggéré par d'autres et pour être complet, ici, ils sont dans une classe utilitaire agissant similaire à la statique, mais plutôt des méthodes sur un singleton l'objet de la déclaration:
Mais je pense que c'est le pire et le moins Kotlin-comme moyen pour étendre les fonctionnalités d'une autre classe. Classes/Objets comme
SomethingUtils
complète de la statique signifie que vous devriez probablement être écrit fonctions d'extension à la place.OriginalL'auteur Jayson Minard
De l'essayer. Cela devrait fonctionner.
@JvmName
pas de laClassInKotlin
, ni les appels à partir de Java.OriginalL'auteur Ankit Kumar