2016-07-21 29 views
1

Bitte beachten Sie den obigen Code. Jetzt habe ich 1 Switch dieses Code-Snippet ist gut genug. Wenn ich 4 Switches also 4 mal habe, wiederhole dieses Code-Snippet. Das ist also doppelt. Hier für jeden Schalter toggle1 -> msg = "1"; für toggle2 -> msg = "2"; Ändern Sie einfach jeden Ort.Android Switch setOnCheckedChangeListener-Methode zum Übergeben von Objekten durch Anwenden des DRY-Prinzips

Wie kann ich Objekt übergeben setOnCheckedChangeListener, so dass ich DRY Prinzip befolgen kann?

+0

Erstellen Sie Ihren eigenen OnCheckedChangListener (der Original erweitert) und übergeben Sie das Objekt mit dem Konstruktor – Chol

+0

@Chol Wenn Sie Ihren Code teilen, werde ich daraus lernen. Ya ich habe versucht zu erstellen. Die CompoundButton-Klasse benötigt jedoch Context. –

Antwort

1

Sie können den Tag der View verwenden und es abrufen später wie dieser

CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() { 

    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     try { 
      String msg =""; 
      if (isChecked) { 
       // The toggle is enabled 

       //msg = "Hello " + String.valueOf(!isChecked); 
       msg = buttonView.getTag().toString() 


      } else { 
       // The toggle is disabled 
       //msg = "Hello " + String.valueOf(!isChecked); 
       msg = buttonView.getTag().toString() 
      } 
      msg += "\n"; 
      outputStream.write(msg.getBytes()); 

     } catch (IOException ex) { 

     } 
     catch (NullPointerException ex) { 

     } 
    } 
}; 

toggle1.setTag("1"); 
toggle2.setTag("2"); 
toggle3.setTag("3"); 

toggle1.setOnCheckedChangeListener(listener); 
toggle2.setOnCheckedChangeListener(listener); 
toggle3.setOnCheckedChangeListener(listener); 

Die buttonView vorbei onCheckChanged ist der Schalter Sie umgeschaltet, die immer eine Ihrer Toggle Variablen ist

+0

}); Ich kann nicht mit ( –

+0

Aktualisiert. Vergessen zu entfernen ')' – 0xDEADC0DE

+0

Oh ich habe es vor U gelöst :) –

1

a Erstellen benutzerdefinierte geprüft Zuhörer:

private class customChecked implements CompoundButton.OnCheckedChangeListener { 

    String msg; 
    public customChecked(String mMsg){ 
     this.msg= mMsg; 
    } 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     myString = msg; 
    } 
} 

Dann gelten:

toggle1.setOnCheckedChangeListener(new customChecked(1)); 
toggle2.setOnCheckedChangeListener(new customChecked(2)); 
+0

Ihre Lösung ist transparenter –