2 Stimmen

Android Button OnClick-Ereignis nach mehreren Klicks ausgelöst

Ich habe eine benutzerdefinierte Android (1.5) Titelleiste, die eine Schaltfläche enthält. Wenn ich die benutzerdefinierte Titelleiste in Aktivität A verwende, kann ich auf die Schaltfläche klicken, und die OnClickListener Ereignis wie erwartet auslösen.

Wenn ich jedoch Aktivität B für das Ergebnis von Aktivität A aus starte, kann es 2-3 Klicks dauern, bis das gleiche Schaltflächenereignis ausgelöst wird.

Dies ist der Code zum Einstellen des Ereignis-Listeners für Aktivität A in der onCreate Überschreiben Sie

setTitleNegativeActionListener(new OnClickListener() {

public void onClick(View v) {
  // end this activity
  ActivityA.this.finish();
  }
});

Dies ist der Code für Aktivität B

setTitleNegativeActionListener(new OnClickListener() {

  public void onClick(View v) {
    setResult(RESULT_CANCELED);
    EditClientAddressActivity.this.finish();
  }
});

Schaltfläche XML aus Layout

<Button 
  android:id="@+id/title_button_right" 
  android:layout_width="wrap_content" android:layout_height="wrap_content" 
  android:background="@drawable/nav_button"
  android:text="Done" android:textColor="#fff"
  android:layout_alignParentRight="true" android:textSize="12dip"
  android:textStyle="bold" android:paddingLeft="10dip"
  android:paddingRight="10dip" android:layout_centerVertical="true"
  android:minWidth="40dip" 
  android:focusableInTouchMode="false" android:focusable="false" />

Es scheint, als ob in Aktivität B der erste Klick die Schaltfläche in den Fokus setzt und der zweite Klick die Schaltfläche tatsächlich drückt. Ich habe jedoch beide focusableInTouchMode y focusable in der Definition der Schaltflächen auf false gesetzt.

Gibt es eine andere Eigenschaft, die definiert werden muss, damit die OnClickListener Ereignis, das in diesem Fall ausgelöst wird?

EDIT : Nach einer weiteren Untersuchung stellte ich fest, dass die untergeordnete Aktivität B zweimal (oder öfter) gestartet wurde und jeder Klick auf die Schaltfläche tatsächlich wie erwartet funktionierte, aber es schien, als ob nichts passierte. Die vollständige Antwort finden Sie unten.

1voto

Karl Punkte 659

Der Code, mit dem die untergeordnete Aktivität gestartet wird, reagiert auf eine onTouch Ereignis, das ausgelöst wurde für ACTION_UP y ACTION_DOWN . Dies würde dazu führen, dass die Aktivität mehrere Instanzen startet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X