Angenommen, wir haben eine Aktivität mit vielen Ansichten, auf der OnClickListener
registriert werden soll.Die beste Methode zum Implementieren von View.OnClickListener in android
Der gängigste Weg, dies zu implementieren, ist die Aktivität-Subklassen-Umsetzung der OnClickListener, so etwas zu lassen:
public class ActivityMain extends Activity implements View.OnClickListener
{
@Override
public void onClick(View view)
{
switch (view.getId())
{
//handle multiple view click events
}
}
}
Die Art, wie ich es umsetzen möchte, ist eine private Klasse innerhalb des Aktivitäts- zu erstellen Unterklasse und lassen die innere Klasse die OnClickListener implementieren:
public class ActivityMain extends Activity implements View.OnClickListener
{
private class ClickListener implements View.OnClickListener
{
@Override
public void onClick(View view)
{
switch (view.getId())
{
//handle multiple view click events
}
}
}
}
diese Weise wird der Code scheint besser organisiert und leicht zu pflegen.
Außerdem, über "Is-a", "Has-a" -Beziehungen sprechend, scheint letzteres eine gute Übung zu sein, weil die Activity-Subclass nun eine "Has-a" -Beziehung mit dem ClickListener haben würde. Während in der früheren Methode würden wir sagen, dass unsere Aktivität-Subclass "Is-a" ClickListener, die nicht vollständig wahr ist.
Beachten Sie, dass ich nicht mit dem Speicheraufwand beschäftigt sind, den der letztere verursachen würde.
Auch das Hinzufügen von onClick-Tag in XML kommt völlig in Frage.
Also, was ist der beste Weg, um einen ClickListener zu implementieren?
Bitte schlagen keine Bibliotheken wie RoboGuice oder Buttermesser usw.
UPDATE:
Ich möchte den Ansatz teilen, die ich schließlich angenommen.
Ich implementiere den Hörer direkt in Aktivität/Fragment.
Soweit OOP-Design betroffen ist. Der "HAS-A" Ansatz bietet keine praktischen Vorteile und nimmt sogar mehr Speicher in Anspruch. Angesichts der Menge der geschachtelten Klassen (und des Speicheraufwands), die wir für jeden ähnlichen Listener, den wir implementieren, erstellen werden, sollte dieser Ansatz klar vermieden werden.
Ihre Frage ist sehr subjektiv, was Sie mit „best“ bedeuten. Was ist dein Ziel? – cyroxis
Ziel ist einfach, folgen Best Practices :) –
Ihr 'ClickListener' ist eine innere nicht-statische Klasse die Kopplung dieser 'hat-a' ist nicht anders, als wenn Ihre Klasse' Activity' 'View.OnClickListener' implementiert. Dies liegt daran, dass Ihr innerer 'ClickListener' eine Instanz von' ActivityMain' benötigt und wirklich nicht wiederverwendet werden kann. Ich würde argumentieren, dass Sie über Engineering sind und nicht wirklich etwas gewinnen. –