Ein OnClick-handler für mehrere buttons in einem fragment

Ich haben 3 Knöpfe im Ausschnitt, den ich verwenden wollte dasselbe click-Ereignis. Wie kann das erreicht werden, innerhalb von ein fragment?

XML

<Button
    android:id="@+id/btn_1"
    android:onClick="btnClick_DoSomething"
    android:text="@string/one"/>

<Button
    android:id="@+id/btn_2"
    android:onClick="btnClick_DoSomething"
    android:text="@string/two"/>

<Button
    android:id="@+id/btn_3"
    android:onClick="btnClick_DoSomething"
    android:text="@string/three"/>

Java

@Override
public void btnClick_DoSomething(View v) {

}

Fehler

@Override (innerhalb des fragments Java-Klasse) wird rot Unterstrichen, und der folgende Fehler wird zurückgegeben,

Annontations sind hier nicht erlaubt

Ich soll das onClick-Ereignis auf die gleiche für alle 3 Tasten

InformationsquelleAutor MacaronLover | 2017-04-18



5 Replies
  1. 1

    Brauchen Sie nicht zu schreiben @Override-annotation, wie Sie nicht überschreiben der Methode. Verwenden Sie einfach

    public void btnClick_DoSomething(View v) {
    
    
    }

    Erhalten Sie einen Rückruf in dieser Methode zur Laufzeit.

    • Ich will das onClick-Ereignis auf die gleiche für alle 3 buttons
    • Bearbeitet meine Antwort. Auf diese Weise können Sie handle onClick event gleich für alle 3 buttons
    • Wo kommt dieses Bedürfnis zu gehen? onCreateView / onActivityCreated / woanders?
    • Es ist eine separate Methode. Nur schreiben Sie es unten onCreateView()
  2. 0

    Welche Methode wollen Sie überschreiben? Führen Sie eine der übergeordneten Klassen haben eine Methode btnClick_DoSomething? Sie müssen nicht alles überschreiben wenn Sie eine Klick-listener von einem Layout-XML. Stellen Sie lediglich sicher, dass eine Methode mit dem gleichen Namen mit einem void-Rückgabetyp und eine Ansicht als sein einziges argument besteht in der activity-Klasse, dass er mit diesem layout

    Die Allgemeine Art und Weise zu unterscheiden Klicks aus verschiedenen Ansichten, in der gleichen onClick-handler ist, Sie zu identifizieren, die von id

    public void btnClick_DoSomething(View v){
        switch(v.getId()){
             case R.id.btn_1:
                   //handle click from button 1
                   break;
             case R.id.btn_2:
                   //handle click from button 2
                   break;
             case R.id.btn_3:
                   //handle click from button 3
                   break;
        }
    }
    • Ich will das onClick-Ereignis auf die gleiche für alle 3 buttons
    • Das ist, wie meine Antwort ist. Ein Klick auf eine der drei Tasten rufen Sie die btnClick_DoSomething (…) – Funktion. Wolltest du die exakt gleichen Maßnahmen ergriffen werden können, unabhängig davon, welche Taste gedrückt wird? in diesem Fall können Sie entfernen Sie die switch-Anweisung vollständig, und nur tun, was Sie brauchen innerhalb dass btnClick_DoSomething Funktion.
  3. -1

    Gibt es einige Missverständnisse hier. Zum überschreiben Klicken Sie auf ein Ereignis, Ihre Fragment Notwendigkeit zur Umsetzung der View.OnClickListener Benutzeroberfläche:

    public class YourFragment extends Fragment implements View.OnClickListener{
    
      @Override
      public void onClick(View v) {
    
      }
    }

    Beachten Sie, dass der name der Methode muss onCLick muss „void“ zurückgeben und bekommt sein ein View als parameter werden overrided von der Schnittstelle. In diesem Fall müssen Sie einen Listener für jeden button in Ihrem fragment:

    btn1 = (Button) view.findViewById(R.id.btn_1);
    btn1.setOnClickListener(this);

    Innerhalb dieser Methode können Sie Steuern, welches Objekt geklickt wurde, durch Ihre ID

     @Override
          public void onClick(View v) {
            int id = v.getId();
           switch(v.getId()){
             case R.id.btn_1:
                   //handle click from button 1
                   break;
             case R.id.btn_2:
                   //handle click from button 2
                   break;
             case R.id.btn_3:
                   //handle click from button 3
                   break;
             }
          }

    Oder wenn Sie nicht müssen Sie diese Methode überschreiben, so entfernen Sie die anotation, die Arbeit ist in Ordnung :

       public void btnClick_DoSomething(View v) {
                switch(v.getId()){
                 case R.id.btn_1:
                       //handle click from button 1
                       break;
                 case R.id.btn_2:
                       //handle click from button 2
                       break;
                 case R.id.btn_3:
                       //handle click from button 3
                       break;
                 }
             }
    • Ich will das onClick-Ereignis auf die gleiche für alle 3 buttons
    • das erste Beispiel funktioniert auch in deinem Fall
    • Wieso der downvote?
    • Das war ein Fehler und sollte nicht sein downvoted.
    • so, einen rollback
  4. -1

    macht man einfach nicht in XML, tun Sie es in Java stattdessen:

    <Button
        android:id="@+id/btn_1"
        android:text="@string/one"/>
    
    <Button
        android:id="@+id/btn_2"
        android:text="@string/two"/>
    
    <Button
        android:id="@+id/btn_3"
        android:text="@string/three"/>

    dann…

    private final OnClickListener onClick = new OnClickListener(){
       @Override
       public void onClick(View view){
           switch(view.getId()){
               ... cases...
           }
       }
    
    
        somewhere initialising the views you do:
        fragmentView.findViewById(R.id.btn_1).setOnClickListener(onClick);
        fragmentView.findViewById(R.id.btn_2).setOnClickListener(onClick);
        fragmentView.findViewById(R.id.btn_3).setOnClickListener(onClick);
    
    }
    • Ich will das onClick-Ereignis auf die gleiche für alle 3 buttons
    • und es ist. Entfernen Sie einfach den „Schalter“
  5. -1

    Statt deklarieren Sie die onClick-Methode in das xml-layout-Datei, könnten Sie die Fragment-Implementierung Anzeigen.onClickListener Schnittstelle, überschreiben onClick() und alle 3 buttons onClickListener wie diese btn.setOnClickListener(this). Legen Sie das gewünschte Verhalten für alle 3 Knöpfe in onClick(). Alle 3 haben das gleiche Verhalten (es sei denn, Sie überprüfen, welche Taste das Ereignis kam in onClick()).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.