web-dev-qa-db-fra.com

Exemple sur ToggleButton

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"
         />  

6
Durga

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);

            }
        }
    });
12
GrIsHu
<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
    }
}
14
Jogendra Gouda

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();
    }
}
3
NPSDPM
@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);

    }
}
1
Harsh Goswami

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

enter image description here

enter image description here

0
Raghunandan

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

0
Berat Eyüboğlu

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.

0
Neeraj Shukla