Rufen Sie die Methode von Kotlin-Klasse
Habe ich ein util Kotlin-Klasse, wo ich die Symbolleiste Titel, ein-oder ausblenden der Symbolleiste hängt von der 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
}
}
wie nennen showToolbar(...) vom Fragment?
Ich habe gerade versucht MyToolbarUtils.showToolbar(..)
aber es kann nicht möglich sein,
nur einen Weg, den ich entdecke, lautet:
val setToolbarTitle = MyToolbarUtils()
setToolbarTitle.showToolbar(activity, tag)
aber es muss doch eine bessere Möglichkeit, das zu tun..
Tut Kotlin mit statischen Methoden? Wenn nicht, was Sie gezeigt haben, macht Sinn
Wenn alle diese arbeiten nur mit einer Klasse
Sie fragte eine xy-Frage ... Sie entschied sich für eine Antwort zu einem Programmier-problem und dann um Hilfe gebeten, mit, dass bereits beschlossen beantworten. Aber in diesem Fall, Ihre Antwort ist nicht richtig überhaupt. Idiomatische Kotlin wird nicht verwendet Statik-oder Objekt-Deklarationen in einem Fall wie diesem, aber verwenden Sie stattdessen stackoverflow.com/a/39499145/3679676
Wenn alle diese arbeiten nur mit einer Klasse
MainActivity
warum sind Sie nur nicht die Methoden, die für diese Klasse?Sie fragte eine xy-Frage ... Sie entschied sich für eine Antwort zu einem Programmier-problem und dann um Hilfe gebeten, mit, dass bereits beschlossen beantworten. Aber in diesem Fall, Ihre Antwort ist nicht richtig überhaupt. Idiomatische Kotlin wird nicht verwendet Statik-oder Objekt-Deklarationen in einem Fall wie diesem, aber verwenden Sie stattdessen stackoverflow.com/a/39499145/3679676
InformationsquelleAutor Stepan | 2016-09-14
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konvertieren Sie Ihre Klasse in eine Objekt soll funktionieren ähnlich wie java statische Methoden.
Können Sie mehr info hier: https://kotlinlang.org/docs/reference/object-declarations.html#object-declarations
dann, wie aufrufen, die Funktion von fragment und adapter ??
oder mit Beispiel oben...
MyToolbarUtils.showToolbar()
. OP, diese seine FrageInformationsquelleAutor ilya.dorofeev
Klingt wie
MyToolbarUtils
sollte ein object-Deklaration statt einer Klasse.Andere Möglichkeit wäre zu erklären, Funktionen innerhalb dieser Klasse auf der obersten Ebene in einer Datei (nicht in jeder Klasse) und nur auf Sie verweisen durch Ihren einfachen Namen.
InformationsquelleAutor Alexander Udalov
Anderen beantwortet, wie zu machen Ihren Funktionen fühlen Sie sich wie die statischen Methoden, aber für diesen Anwendungsfall haben Sie eine weitere idiomatische option.
Erweiterung Funktionen in Kotlin ersetzen statischen utility-Klassen in Java:
Seit alle Ihre Funktionen nehmen Sie ein
Activity
als parameter, warum nicht Erweiterung Funktionen und machen Sie erweitern dieActivity
oderMainActivity
statt Klasse?Jetzt sind Sie alle im Rahmen Ihrer
MainActivity
oderActivity
Klassen (diethis
ist nun eine Instanz von einer von denen), Sie müssen nicht jagen gehen für Sie in einigen anderen unabhängigenActivityUtils
Klasse. Wann immer Sie sind im inneren des activity-Klasse können Sie einfach:oder von irgendwo anders, wo Sie einen Verweis auf eine Aktivität:
Beachten Sie auch, dass ich den code aufgeräumt ein wenig und verwendet
als Ausdruck um Titel, und auch das entfernen von
var
(es ist selten, wenn Sie brauchen einevar
, also immer nachdenken, wie die Arbeit mitval
). Und als Ausdruck derwhen
benötigen eineelse
- Klausel, also machte ich dasselbe, wie Sie Standard -""
leeren string.Als Alternative Klassenmethoden:
Da alle 3 Methoden, die alle benötigen eine Instanz von
MainActivity
(basierend auf Ihrem casting -), warum nicht einfach setzen Sie Sie inMainActivity
als member-Funktionen.Und rufen Sie Sie von jedem Verweis auf
MainActivity
.Alternative als Object-Deklaration:
Zuletzt vorgeschlagen, die von anderen und zur Vollständigkeit, hier sind Sie in eine utility-Klasse handeln, ähnlich der Statik, sondern stattdessen Methoden auf ein singleton -object-Deklaration:
Aber ich denke, das ist die schlechteste und am wenigsten Kotlin-wie die Erweiterung der Funktionalität einer anderen Klasse ist. Klassen/Objekte wie
SomethingUtils
voller Statik bedeutet, dass Sie wahrscheinlich sein sollten, schreiben Erweiterung Funktionen statt.InformationsquelleAutor Jayson Minard
Versuchen. Sollte dies funktionieren.
@JvmName
keine derClassInKotlin
noch die Aufrufe aus Java.InformationsquelleAutor Ankit Kumar