I wanted to toggle between two states of my toggle button after the 2 second delay

118 Views Asked by At

i am trying to update my UI status every 2 seconds, the UI include a text view and toggle button, my problem here is the text view gets updated correctly but the toggle button gets updated at first and then nothing happens, this is the code used

@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tb = (ToggleButton) findViewById(R.id.tb);
            tv = (TextView) findViewById(R.id.tv);
            Timer myTimer = new Timer();
            myTimer.schedule(new TimerTask() {
                @Override
                public void run() {
                    UpdateGUI();

            }
        }, 0, 2000);
    }

    private void UpdateGUI() {
        i++;

        //tv.setText(String.valueOf(i));
        myHandler.post(myRunnable);
    }

    final Runnable myRunnable = new Runnable() {
        public void run() {

              runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                      tv.setText("Counter is "+i);
                      if ((i/2)==0){System.out.println("Condition true........"+i);tb.setChecked(true);}else{ System.out.println("Condition failed........"+i);tb.setChecked(false);}
                  }
              });
            }



    };
}

The output in logcat is

System.out: Condition true........1
 I/System.out: Condition failed........2
01-07 11:04:49.304 17321-17321/com.example.vishal.updateui I/System.out: Condition failed........3
01-07 11:04:50.305 17321-17321/com.example.vishal.updateui I/System.out: Condition failed........4
01-07 11:04:51.304 17321-17321/com.example.vishal.updateui I/System.out: Condition failed........5
01-07 11:04:52.305 17321-17321/com.example.vishal.updateui I/System.out: Condition failed........6
1

There are 1 best solutions below

0
On BEST ANSWER

You code condition for toggle is wrong

Your code:

if ((i / 2) == 0) {
        System.out.println("Condition true........" + i);
        tb.setChecked(true);
    } else {
        System.out.println("Condition failed........" + i);
        tb.setChecked(false);
    }

Update with this one:

if ((i % 2) == 0) {
            System.out.println("Condition true........" + i);
            tb.setChecked(true);
        } else {
            System.out.println("Condition failed........" + i);
            tb.setChecked(false);
        }

Issue is with "/" because if i==1 then value will be 1/2 = 0 but after that value will never 0 for i/2.