Vor Honeycomb (Android 3) wurde jede Aktivität registriert, um Schaltflächenklicks über die onClick
Tag in der XML-Datei eines Layouts:
android:onClick="myClickMethod"
Innerhalb dieser Methode können Sie Folgendes verwenden view.getId()
und eine switch-Anweisung für die Logik der Schaltfläche.
Mit der Einführung von Honeycomb zerlege ich diese Aktivitäten in Fragmente, die in vielen verschiedenen Aktivitäten wiederverwendet werden können. Das Verhalten der Schaltflächen ist größtenteils Activity-unabhängig, und ich möchte, dass der Code in der Fragment-Datei enthalten ist ohne mit der alten (vor 1.6) Methode der Registrierung der OnClickListener
für jede Taste.
final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
Das Problem ist, dass, wenn meine Layouts aufgeblasen werden, ist es immer noch die Hosting-Aktivität, die die Schaltfläche Klicks erhält, nicht die einzelnen Fragmente. Gibt es einen guten Ansatz für entweder
- Das Fragment registrieren, um die Schaltflächenklicks zu empfangen?
- Die Klick-Ereignisse von der Aktivität an das Fragment weitergeben, zu dem sie gehören?
1 Stimmen
Können Sie die Registrierung von Zuhörern nicht innerhalb des onCreate des Fragments vornehmen?
26 Stimmen
@jodes Ja, aber ich möchte nicht die
setOnClickListener
yfindViewById
für jede Schaltfläche, deshalbonClick
wurde hinzugefügt, um die Dinge zu vereinfachen.4 Stimmen
Wenn ich mir die akzeptierte Antwort ansehe, denke ich, dass die Verwendung von setOnClickListener lockerer gekoppelt ist als das Festhalten am XML onClick-Ansatz. Wenn die Aktivität jeden Klick an das richtige Fragment "weiterleiten" muss, bedeutet dies, dass der Code jedes Mal geändert werden muss, wenn ein Fragment hinzugefügt wird. Die Verwendung einer Schnittstelle zur Entkopplung von der Basisklasse des Fragments ist dabei nicht hilfreich. Wenn das Fragment mit der richtigen Schaltfläche selbst registriert, bleibt die Aktivität völlig agnostisch, die besser Stil IMO ist. Siehe auch die Antwort von Adorjan Princz.
0 Stimmen
@smith324 muss Adriaan in diesem Punkt zustimmen. Probieren Sie Adorjans Antwort aus und sehen Sie, ob das Leben danach nicht besser ist.