Je développe une application à l'aide d'un bouton bascule, j'ai entré 1 ou 0 dans EditText
. Lorsque le bouton est cliqué, le bouton bascule doit changer si j'entre 1, le bouton bascule indique TOGGLE ON
, si j'entre 0, le bouton bascule doit afficher TOGGLE OFF
. Je ne parviens pas à obtenir les valeurs de bascule lorsque l'utilisateur clique sur le bouton.
Mon code est:
public class MainActivity extends Activity {
String editString="";
Button btn;
EditText ed;
ToggleButton toggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button)findViewById(R.id.btn);
ed = (EditText)findViewById(R.id.ed);
toggle = (ToggleButton)findViewById(R.id.toggBtn);
editString = ed.getText().toString();
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toggle.toggle();
if(editString.equals("1")){
toggle.setTextOff("TOGGLE ON");
}
else if(editString.equals("0")){
toggle.setTextOn("TOGGLE OFF");
}
}
});
}
}
Fichier XML:
<LinearLayout 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"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
Android:orientation="vertical">
<EditText
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/ed"/>
<Button Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/btn"
Android:text="Summit"/>
<ToggleButton
Android:id="@+id/toggBtn"
Android:layout_below="@+id/text6"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:gravity="center"
/>
Supprimez simplement la ligne toggle.toggle();
de votre méthode d'écoute de clic toggle()
réinitialisera toujours la valeur de votre bouton bascule.
Et comme vous essayez de prendre la valeur EditText
dans la variable chaîne qui reste toujours identique à celle que vous obtenez dans onCreate()
, il vaut donc mieux utiliser directement la EditText
pour en obtenir la valeur dans votre écouteur onClick
.
Il suffit de changer votre code comme ci-dessous, il fonctionne bien maintenant.
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//toggle.toggle();
if ( ed.getText().toString().equalsIgnoreCase("1")) {
toggle.setTextOff("TOGGLE ON");
toggle.setChecked(true);
} else if ( ed.getText().toString().equalsIgnoreCase("0")) {
toggle.setTextOn("TOGGLE OFF");
toggle.setChecked(false);
}
}
});
<ToggleButton
Android:id="@+id/togglebutton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textOn="Vibrate on"
Android:textOff="Vibrate off"
Android:onClick="onToggleClicked"/>
Dans l'activité qui héberge cette mise en page, la méthode suivante gère l'événement click:
public void onToggleClicked(View view) {
// Is the toggle on?
boolean on = ((ToggleButton) view).isChecked();
if (on) {
// Enable vibrate
} else {
// Disable vibrate
}
}
Essayez ce bouton bascule
test_activity.xml
<ToggleButton
Android:id="@+id/togglebutton"
Android:layout_width="100px"
Android:layout_height="50px"
Android:layout_centerVertical="true"
Android:layout_centerHorizontal="true"
Android:onClick="toggleclick"/>
Test.Java
public class Test extends Activity {
private ToggleButton togglebutton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
togglebutton = (ToggleButton) findViewById(R.id.togglebutton);
}
public void toggleclick(View v){
if(togglebutton.isChecked())
Toast.makeText(TestActivity.this, "ON", Toast.LENGTH_SHORT).show();
else
Toast.makeText(TestActivity.this, "OFF", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
editString = ed.getText().toString();
if(editString.equals("1")){
toggle.setTextOff("TOGGLE ON");
toggle.setChecked(true);
}
else if(editString.equals("0")){
toggle.setTextOn("TOGGLE OFF");
toggle.setChecked(false);
}
}
Déplacer cette
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
editString = ed.getText().toString();
à l'intérieur onClick
De plus, vous changez l’état du bouton toogle, que ce soit 0
ou 1
http://developer.Android.com/guide/topics/ui/controls/togglebutton.html
Exemple:
<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"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_centerHorizontal="true"
Android:layout_marginBottom="20dp"
Android:text="Button" />
<EditText
Android:id="@+id/editText1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:layout_marginTop="26dp"
Android:ems="10" >
<requestFocus />
</EditText>
<Switch
Android:id="@+id/switch1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignRight="@+id/editText1"
Android:layout_below="@+id/editText1"
Android:layout_marginTop="51dp"
Android:text="Switch" />
<ToggleButton
Android:id="@+id/togglebutton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignLeft="@+id/button1"
Android:layout_below="@+id/switch1"
Android:layout_marginTop="58dp"
Android:onClick="onToggleClicked"
Android:textOff="Vibrate off"
Android:textOn="Vibrate on" />
</RelativeLayout>
MainActivity.Java
public class MainActivity extends Activity implements OnClickListener {
EditText ed;
Switch sb;
ToggleButton tb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed = (EditText) findViewById(R.id.editText1);
Button b = (Button) findViewById(R.id.button1);
sb = (Switch)findViewById(R.id.switch1);
tb = (ToggleButton)findViewById(R.id.togglebutton);
b.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String s = ed.getText().toString();
if(s.equals("1")){
tb.setText("TOGGLE ON");
tb.setActivated(true);
sb.setChecked(true);
}
else if(s.equals("0")){
tb.setText("TOGGLE OFF");
tb.setActivated(false);
sb.setChecked(false);
}
}
}
Snaps
Vous devez suivre le guide Google.
ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton);
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// The toggle is enabled
} else {
// The toggle is disabled
}
}
});
Vous pouvez consulter la documentation ici
Je pense que ce que vous tentez est sémantiquement identique à un bouton radio lorsque 1 correspond à l’une des options sélectionnées et 0 à l’autre.
Je suggère d'utiliser le bouton radio fourni par Android par défaut.
Voici comment l'utiliser- http://www.mkyong.com/Android/android-radio-buttons-example/
et la documentation Android est ici-
http://developer.Android.com/guide/topics/ui/controls/radiobutton.html
Merci.