2013-07-13 4 views
2

У меня есть работа с Switch Control. С помощью этого переключателя пользователь может включить/выключить tcp-сервер.Android change change calls Switch.onChange

Теперь у меня есть аналогичная проблема here. Если коммутатор (а также сервер) включен, а ориентация меняется, то снова вызывается onclicklistener, а также снова запускается сервер.

Я пытался справиться с этим, проверяя, если клиент является недействительным:

OnCheckedChangeListener listener = new OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  
     if(isChecked) { 
      if (client == null) 
       startCubeSolverServer(); 
     } else { 
      if (client != null) 
       stutdownCubeSolverServer(); 
     } 
    } 
}; 

но поскольку объект клиент является частной переменной моей деятельности он сбрасывается на нуль каждое изменение ориентации.

Есть ли легкое исправление, чтобы не запускать changeHandler, если значение не изменяется при просмотре пользователей?

+1

вместо проверки 'клиент! = Null' вы можете использовать' sharedPreferences' и хранить '' String' или значение boolean' в 'OnPause()', а затем выполнить проверку в 'onResume()'. –

+0

Полезная идея использовать sharedPreferences! У вас также есть идея, где я должен обращаться с объектом моего сервера? – TomBoo

+0

вы можете реализовать целую функцию 'OnCheckedChangeListener' в onResume() и' SharedPreferences' в 'onPause'. Также, если мои комментарии полезны, отметьте их так. –

ответ

1

Поведение системы в вашей ситуации верное. OnCheckedChanged следует вызывать при изменении ориентации.

Теперь для вашей ситуации, если tcp-сервер является сервисом, тогда вы должны перенести все инициализации в метод onCreate этой службы, а не в onStartCommand, так что вам не нужно ничего делать при изменении ориентации с тех пор служба создается только один раз системой, и не имеет значения, сколько раз вы собираетесь начать ее снова.

Другое решение - обрабатывать событие onClick вашей кнопки переключателя вместо onCheckedChanged, потому что onClick не будет запускаться после изменения ориентации. Однако если вы это сделаете, вы должны изучить, срабатывает ли метод onClick вашей кнопки переключения до или после изменения состояния проверки.

Надеется, что это помогает ...