10

I am developing an application using a toggle button, I entered 1 or 0 in EditText. When button is clicked, the toggle button has to change if I enter 1 the toggle button shows TOGGLE ON, if I enter 0 the toggle button has to show TOGGLE OFF. I am unable to get toggle values when the button is clicked.

My code is:

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

xml file:

<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"
 /> 
asked Jan 22, 2014 at 8:13
1
  • thank you but it changed when button clicked second time on words and every time changing toggle button without enter value in edit text when clicked button Commented Jan 22, 2014 at 8:21

6 Answers 6

17

Just remove the line toggle.toggle(); from your click listener toggle() method will always reset your toggle button value.

And as you are trying to take the value of EditText in string variable which always remains same as you are getting value in onCreate() so better directly use the EditText to get the value of it in your onClick listener.

Just change your code as below its working fine now.

 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);
 }
 }
 });
answered Jan 22, 2014 at 8:24
Sign up to request clarification or add additional context in comments.

Comments

5

You should follow the Google guide;

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

You can check the documentation here

answered Apr 25, 2018 at 7:28

Comments

3

Try this Toggle Buttons

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();
 }
}
answered Aug 24, 2014 at 12:30

Comments

1

Update: Please have a look at material components here https://material.io/components/buttons/android#toggle-button There is a section for toggle button which should be use instead of the oudated answer below.

Old Answer ( not recommended anymore)

Move this

 btn.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View v) {
 editString = ed.getText().toString();

inside onClick

Also you change the state of the toogle button whether its 0 or 1

http://developer.android.com/guide/topics/ui/controls/togglebutton.html

Example:

<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

answered Jan 22, 2014 at 8:16

4 Comments

thank you but it changed when button clicked second time on words and every time changing toggle button without enter value in edit text when clicked button
@user3081942 i din't understand your comment
@user3081942 your problem is your change the state of toogle buttom whethere its 1 or 0. So it always changes the state
@user3081942 check the edited post for both switch and toggle button
0

I think what are attempting is semantically same as a radio button when 1 is when one of the options is selected and 0 is the other option.

I suggest using the radio button provided by Android by default.

Here is how to use it- http://www.mkyong.com/android/android-radio-buttons-example/

and the android documentation is here-

http://developer.android.com/guide/topics/ui/controls/radiobutton.html

Thanks.

answered Jan 22, 2014 at 8:20

Comments

0
@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);
 }
}
answered Jan 22, 2014 at 8:32

1 Comment

@user3081942 Just change this code. and put comment on toggle.toggle();

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.