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 eine new View.OnClickListener
  • mPresenterListener = this.mPresenterListener und modelListener = 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
InformationsquelleAutor Josh Ribeiro | 2017-11-30
Schreibe einen Kommentar