2012-06-30 8 views
129

Ich möchte einen Schalter, Android.widget.Switch (verfügbar von API v.14) implementieren.android.widget.Switch - Ein/Aus-Ereignis-Listener?

Aber ich bin nicht sicher, wie Sie einen Ereignis-Listener für die Schaltfläche hinzufügen. Sollte es ein "onclick" Listener sein? Und wie würde ich wissen, ob es eingeschaltet ist oder nicht?

+3

OnClick via XML funktioniert tatsächlich - aber nur für "Klicks" auf die Schaltfläche, nicht für "Folien". – m02ph3u5

Antwort

290

Schalter erbt CompoundButton ‚s Attribute, so würde ich die OnCheckedChangeListener

mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     // do something, the isChecked will be 
     // true if the switch is in the On position 
    } 
}); 
+0

Funktioniert wie ein Charme, danke Sam – Johan

+1

@Johan Kein Problem. Ich weiß nicht über dich, aber ich wünschte, sie nennen es OnCheckChangedListener, ähnlich wie OnItemSelectedListener, da On-_Noun _-_ Verb_-Listener eine etablierte Namenskonvention ist. – Sam

+5

Es funktioniert nicht, wenn Sie die Taste lange drücken und dann wischen/wechseln. –

29

Verwenden Sie den folgenden Ausschnitt empfehlen Wechseln Sie zu Ihrem Layout über XML hinzuzufügen:

<Switch 
    android:id="@+id/on_off_switch" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textOff="OFF" 
    android:textOn="ON"/> 

Dann in Ihrer Aktivität des onCreate Methode, erhalten Sie einen Verweis auf Ihren Switch und setzen Sie seinen OnCheckedChangeListener:

+3

Dies ist eine klarere Antwort, die Ihnen das Layout und den Code gibt, der passend ist. – AshesToAshes

+0

Wie man mehrere switchcompat im einzelnen Zuhörer verwaltet? Bitte schlagen Sie eine Antwort darauf vor –

16

Definieren Sie Ihre XML-Layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.neoecosystem.samplex.SwitchActivity"> 

    <Switch 
     android:id="@+id/myswitch" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" /> 

</RelativeLayout> 

dann eine Aktivität erstellen

public class SwitchActivity extends ActionBarActivity implements CompoundButton.OnCheckedChangeListener { 

    Switch mySwitch = null; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_switch); 


     mySwitch = (Switch) findViewById(R.id.myswitch); 
     mySwitch.setOnCheckedChangeListener(this); 
    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      // do something when check is selected 
     } else { 
      //do something when unchecked 
     } 
    } 

    **** 
} 

======== Für unter API 14 Verwendung SwitchCompat =========

XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.neoecosystem.samplex.SwitchActivity"> 

    <android.support.v7.widget.SwitchCompat 
     android:id="@+id/myswitch" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" /> 

</RelativeLayout> 

Aktivität

public class SwitchActivity extends ActionBarActivity implements CompoundButton.OnCheckedChangeListener { 

    SwitchCompat mySwitch = null; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_switch); 


     mySwitch = (SwitchCompat) findViewById(R.id.myswitch); 
     mySwitch.setOnCheckedChangeListener(this); 
    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      // do something when checked is selected 
     } else { 
      //do something when unchecked 
     } 
    } 
    ***** 
} 
+2

Vergessen Sie nicht, buttonView.isPressed() zu überprüfen – JacksOnF1re

4

Das Layout für Switch-Widget ist so etwas.

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
    <Switch 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="20dp" 
     android:gravity="right" 
     android:text="All" 
     android:textStyle="bold" 
     android:textColor="@color/black" 
     android:textSize="20dp" 
     android:id="@+id/list_toggle" /> 
</LinearLayout> 

In der Aktivitätsklasse können Sie auf zwei Arten codieren. Hängt von der Verwendung ab, die Sie programmieren können.

Erste Way

public class ActivityClass extends Activity implements CompoundButton.OnCheckedChangeListener { 
Switch list_toggle; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.return_vehicle); 

    list_toggle=(Switch)findViewById(R.id.list_toggle); 
    list_toggle.setOnCheckedChangeListener(this); 
    } 
} 

public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
    if(isChecked) { 
     list_toggle.setText("Only Today's"); //To change the text near to switch 
     Log.d("You are :", "Checked"); 
    } 
    else { 
     list_toggle.setText("All List"); //To change the text near to switch 
     Log.d("You are :", " Not Checked"); 
    } 
} 

Zweiter Weg

public class ActivityClass extends Activity { 
Switch list_toggle; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.return_vehicle); 

    list_toggle=(Switch)findViewById(R.id.list_toggle); 
    list_toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if(isChecked) { 
      list_toggle.setText("Only Today's"); //To change the text near to switch 
      Log.d("You are :", "Checked"); 
      } 
      else { 
      list_toggle.setText("All List"); //To change the text near to switch 
      Log.d("You are :", " Not Checked"); 
      } 
     }  
    }); 
    } 
} 
0

Für diejenigen Kotlin verwenden, können Sie einen Listener für einen Schalter (in diesem Fall die ID mySwitch mit) einstellen können, wie folgt:

mySwitch.setOnCheckedChangeListener { _, isChecked -> run { 
     // do whatever you need to do when the switch is toggled here 
    } 
} 

isChecked ist wahr, wenn der Schalter derzeit überprüft wird (ON), und false otherw iss.