getOnClickListener() in Android-Ansichten
Brauche ich eine getOnClickListener() für Ansichten in Android. Auf diese Weise kann ich zuweisen einer temporären OnClickListener zu meinen Ansichten.
Ich möchte es verwenden, wie diese:
private View.OnClickListener oldListener;
public void assignTempListener(View view) {
oldListener = view.getOnClickListener(); //doesn't exist
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//some code
v.setOnClickListener(oldListener);
}
});
}
Das problem ist, dass diese Funktion doen nicht vorhanden. Ich kann auch nicht Erben von Anzeigen, um diese Methode zu erstellen, weil alle Ansichten übertragen werden assignTempListener. Gibt es eine andere Möglichkeit dies zu nutzen?
Edit: ein kleiner Fehler in meinem code.
- Ich möchte das zuweisen einer temporären OnClickListener zu einer bereits verlassen-Ansicht. Ich habe keine Kontrolle, wo die orginal OnClickListener zugewiesen ist. Also ich kann nicht speichern es dort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies tun mit...REFLEXION. *Trommelwirbel*
Dieser Weg ist voller Gefahren.
Ich nicht empfehlen, da die interne Struktur der Klasse jederzeit ändern kann, aber hier ist, wie Sie es tun können derzeit bis zu Android 4.2.2, ob es wirklich unvermeidbar:
können Sie überschreiben die Klasse und erklären einen onClicklistener für Ihre anzeigen und schreiben setter-und getter für onClickListener Feld:
verwenden
statt
getOnClickListener ist nicht jede Methode für Anzeigen oder für Button in der Aktuellen API docs für mehr details
http://developer.android.com/reference/android/view/View.OnClickListener.html
oldListener = view.setOnClickListener(); // doesn't exist
werden mussteoldListener = view.getOnClickListener(); // doesn't exist
Antwort sooo einfach
Volle Funktionalität der onclicklistener außer eine Sache, die Sie nicht passieren können jede Ansicht als argument in es,
clickableView
werden die handler, aber in den meisten Fällen ist es ausreichendNiet!
Den oldListener in der gegebenen Antworten ist in jedem Fall neu definiert, und es alten Staates oder-definition verloren ist, unabhängig davon, dass es der name vorgibt, sonst.
Folgenden diese Technik:
Aktuelle onClickListener von einem Android-View-Objekt
die "alten" listener festgelegt werden, die in der abstrakten Klasse die onClick-Methode
und alle temporären listener verwenden würde setOnClickListener zusammen mit einem Aufruf von super, um (re)set die alten listener, wenn oder gegebenenfalls
Den temp-listener-Einstellung code muss nicht wissen, was die "alten" listener ist jedoch
es muss noch irgendeine form von Koordination, um für den Autor der oder die Zuhörer, um Sie Abstrakt und verwenden Sie die onClick-Methode die auf Klick-listener, kurz gesagt, Folgen einem Protokoll.
Außergewöhnlich, möchten Sie vielleicht, um die bypass-geschützt oder privat-Qualifikation der onclicklistener View Mitglied: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/view/View.java#View.0mOnClickListener
und dann noch ein wenig http://www.jguru.com/faq/view.jsp?EID=321191
der Sie in den Hörer.
Möchten Sie vielleicht sogar eigene zu schreiben, getOnClickListener, oder jede getter für diese Angelegenheit, die verwendet die instrospection Ansatz, wenn es natürlich funktioniert tatsächlich 🙂
🙂