Die Instanziierung einer Schnittstelle Listener in Kotlin
Ich kann nicht für das Leben von mir, instanziieren eine Schnittstelle außerhalb des Fragmentes in Kotlin oder Kotlin für Android. Es war standard-Verfahren in Java etwas zu sagen wie:
MyInterface mInterfaceListener = new MyInterface(this);
mInterfaceListener.invokeSomeGenericMethod();
Beachten Sie, dass mInterfaceListener bezieht sich auf eine Schnittstelle, nicht ein onCLickListener oder ähnliches
Wie werden interfaces instanziiert in Kotlin? Wie mache ich eine "listener" - und trigger-Schnittstelle Funktionen?
Unten sind einige versuche eine sehr einfache app, die ich mache, zu Lernzwecken. Beachten Sie die variable mPresenterListener das ist eine Schnittstelle
class QuoteActivity : QuoteContract.ViewOps, AppCompatActivity() {
private lateinit var vText: TextView
private lateinit var vFab: FloatingActionButton
private lateinit var mPresenterListener: QuoteContract.PresenterOperations
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mPresenterListener = this.mPresenterListener
vText=findViewById(R.id.main_quote)
vFab=findViewById(R.id.main_fab)
vFab.setOnClickListener{
mPresenterListener.onQuoteRequested()
}
}
override fun displayQuote(quote: String) {
vText.text = quote
}
}
Und mein presenter:
class QuotePresenter(private val viewListener: QuoteContract.ViewOps): QuoteContract.PresenterOperations {
private lateinit var modelListener: QuoteContract.ModelOperations
init {
modelListener = this.modelListener
}
override fun onQuoteRequested() {
modelListener.generateQuote()
}
override fun onQuoteGenerated(quote: String) {
viewListener.displayQuote(quote)
}
}
Schnittstelle:
interface QuoteContract {
//Methods available to Presenter (Presenter -> View)
interface ViewOps{
fun displayQuote(quote: String)
}
//Ops offered from presenter to view (Presenter->View)
interface PresenterOperations {
//Presenter->View
fun onQuoteRequested()
//Presenter->Model
fun onQuoteGenerated(quote: String)
}
//Ops offered from Model to Presenter (Model -> Presenter)
interface ModelOperations {
fun generateQuote()
}
}
- Ist diese spezifische Schnittstellen oder Zuhörer, oder Fragen Sie, wie Sie Objekte erstellen, die im Allgemeinen?
- Sie sind bereits mit der Implementierung einer Schnittstelle in der
setOnClickListener
da, das erfordert einenew View.OnClickListener
mPresenterListener = this.mPresenterListener
undmodelListener = this.modelListener
. Warum sind verwenden, weisen Sie der Variablen auf sich selbst?- Dies ist in Bezug auf Schnittstellen selbst. Ich habe aktualisiert die Frage, um den code für die Schnittstelle zu machen, mehr klar. Ich bin versucht zu machen, so dass alle aktiven classes/views, die das interface implementieren, wird die execute-Methoden der Schnittstelle. Für die Zuordnung zu sich selbst, ja, das war mir zu werfen Schlamm an der Wand zu sehen, was klebt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie tun, Beobachter/Zuhörer wie diese:
dann:
Beachten Sie das Objekt in der Deklaration der watcher. Kann das gleiche tun mit einem listener.
Auch wir können Hörer ohne irgendeine Schnittstelle und mit default-Wert: