Könnte mir jemand helfen, eine benutzerdefinierte Listener-Oberfläche mit einigen Codefragmenten zu erstellen?
134
Erstellen Sie eine neue Datei:
MyListener.java
::
public interface MyListener {
// you can define any parameter as per your requirement
public void callback(View view, String result);
}
Implementieren Sie in Ihrer Aktivität die Schnittstelle:
MyActivity.java
::
public class MyActivity extends Activity implements MyListener {
@override
public void onCreate(){
MyButton m = new MyButton(this);
}
// method is invoked when MyButton is clicked
@override
public void callback(View view, String result) {
// do your stuff here
}
}
Rufen Sie in Ihrer benutzerdefinierten Klasse bei Bedarf die Schnittstelle auf:
MyButton.java
::
public class MyButton {
MyListener ml;
// constructor
MyButton(MyListener ml) {
//Setting the listener
this.ml = ml;
}
public void MyLogicToIntimateOthers() {
//Invoke the interface
ml.callback(this, "success");
}
}
WeakReference<>
in diesem Fall ein verwenden, aber dann können Sie den Hörer nicht zu einer anonymen Klasse machen oder zu etwas, bei dem der Hörer keine anderen Referenzen hat ... daher wäre es vorzuziehen, es nicht zu verwendenBitte lesen Sie das Beobachtermuster
Listener-Schnittstelle
dann sag in deiner Klasse
Event
Klassein Ihrer Fahrerklasse
MyTestDriver
quelle
Schnittstelle
GenericAsyncTask
Werfen Sie einen Blick auf diese , diese Frage für weitere Details.
quelle
Es gibt 4 Schritte:
1.Schnittstellenklasse erstellen (Listener)
2. Verwenden Sie die Schnittstelle in Ansicht 1 (Variable definieren).
3. implementiert die Schnittstelle zu Ansicht 2 (Ansicht 1 wird in Ansicht 2 verwendet)
4. Übergeben Sie die Schnittstelle in Ansicht 1 an Ansicht 2
Beispiel:
Schritt 1: Sie müssen eine Schnittstelle erstellen und eine Funktion definieren
Schritt 2: Verwenden Sie diese Schnittstelle in der Ansicht
Schritt 3,4: Implementiert die Aktivität
quelle
Listener-Schnittstelle erstellen.
Erstellen Sie die Methode setOnCustomClick in einer anderen Aktivität (oder einem Fragment), in der Sie Ihren benutzerdefinierten Listener anwenden möchten.
Rufen Sie diese Methode aus Ihrer ersten Aktivität auf und übergeben Sie die Listener-Oberfläche ...
quelle
Im Jahr 2018 sind keine Hörerschnittstellen erforderlich. Sie haben Android LiveData, um sicherzustellen, dass das gewünschte Ergebnis an die UI-Komponenten zurückgegeben wird.
Wenn ich Rupeshs Antwort nehme und sie an die Verwendung von LiveData anpasse, wird es so aussehen:
und jetzt in Ihrer Treiberklasse MyTestDriver:
Für weitere Informationen zusammen mit Codebeispielen können Sie meinen Beitrag darüber sowie die offiziellen Dokumente lesen:
Wann und warum LiveData verwenden?
Offizielle Dokumente
quelle
In Android können Sie eine Benutzeroberfläche wie Listener erstellen, die von Ihrer Aktivität implementiert wird. Ich halte dies jedoch nicht für eine gute Idee. Wenn wir viele Komponenten haben, um die Änderungen ihres Status abzuhören, können wir einen BaseListener-Implementierungsschnittstellen-Listener erstellen und Typcode verwenden, um sie zu verarbeiten. Wir können die Methode binden, wenn wir eine XML-Datei erstellen, zum Beispiel:
und der Quellcode:
aber ich denke nicht, dass es eine gute Idee ist ...
quelle
Ich habe es wie folgt gemacht, um meine Modellklasse von der zweiten Aktivität zur ersten Aktivität zu senden. Ich habe LiveData verwendet, um dies mithilfe von Antworten von Rupesh und TheCodeFather zu erreichen.
Zweite Aktivität
"liveSong" ist AudioListModel, das global deklariert ist
Rufen Sie diese Methode in der ersten Aktivität auf
Möge dies neuen Entdeckern wie mir helfen.
quelle
Einfache Methode, um diesen Ansatz zu tun. Implementiert zunächst das
OnClickListeners
in Ihrer Aktivitätsklasse.Code:
quelle