2011-05-09 3 views
8

У меня есть ToggleButton, определенный как это:Как изменить состояние ToggleButton программно?

<ToggleButton android:text="ToggleButton" android:id="@+id/toggle" 
    android:layout_height="wrap_content" android:layout_width="fill_parent"></ToggleButton> 

И я хочу, чтобы изменить свое состояние программно. Я пробовал использовать методы setChecked и toggle, но ни одна из них не работает в моей ситуации.

У меня есть постоянное уведомление, и когда моя активность получает намерение уведомления, кнопка toggle должна быть установлена, чтобы ее не проверять, но она не работает.

Я делаю это в действии onResume. Код выполняется, но состояние ToggleButton не изменяется.

Странно, если я вызываю setChecked(false) на активность onCreate, он меняет состояние кнопки, но не на onResume. Что мне не хватает?

Спасибо.

ответ

15

Got it. Вид.

У меня был

protected void onResume() { 
     super.onResume(); 

     Intent intent; 

     if ((intent = getIntent()) != null && MainActivity.STOP.equals(intent.getAction())) { 
      disable(); 

      toggle.setChecked(false); 

      finish(); 
     } 
    } 

Но призыв к finish фактически не делает ничего. Я удалил его, и теперь он работает. Не знаю, почему это исправлено.

Кто-то должен объяснить?

0

Должно работать.

Убедитесь, что у вас нет вызова setChecked(true) где-то еще в коде, который выполняется после того, как вы установите его на false. Возможно, внутри OnCheckedChangeListener?

+0

Я знаю, что он должен , но это не так. У меня нет других вызовов 'setChecked', просто просмотрен через весь код. – Franco

1

Позвоните в отделку, когда ваша деятельность завершена и должна быть закрыта. ActivityResult распространяется на тех, кто запустил вас через onActivityResult().

Так что в вашем случае вместо изменения состояния кнопки переключения оно восходит к его вызывающему методу, который может быть OnCreate() или OnPause ...

Подробнее об использовании закончить here.....