2015-12-14 3 views
5

Кнопка переключения не переходит в состояние ВЫКЛ в пользовательском интерфейсе, также я установил onCheckedChangeListener. Он остается включенным и становится серым. Это происходит на Simulator с API15, но не отображается в API19 на моем реальном устройстве. Это код или симулятор?
Последний sr.setChecked(false) позволяет только серой кнопке, но не отключает ее.
Минимальный пример для воспроизведения поведения: класс вар:Сброс кнопки переключения не работает должным образом

Switch sr; 
Switch srs; 

OnCreate включает в себя:

sr = (Switch) findViewById(R.id.switch_ros); 
    srs = (Switch) findViewById(R.id.switch_ros_stream); 
    sr.setOnCheckedChangeListener(this); 
    srs.setOnCheckedChangeListener(this); 

onCheckedChanged включает в себя:

@Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    buttonView.setChecked(false); 
} 

EDIT: Вместо Nexus_4_API_15 я попытался Nexus_5_API_19 и он отлично работает. Кажется, это Android-ошибка. Image of Simulators

+0

- устройство samsung? черт возьми, они всегда это делают ... –

+2

Что вы пытаетесь достичь здесь ... почему вы делаете findViewById (R.id.switch_ros) внутри onCheckedChanged, когда у вас уже есть Switch sr в oncreate – Nitesh

+0

спасибо, отредактируйте. – ItsmeJulian

ответ

2

Место эти два в верхней части класса

private Switch sr; 
private Switch srs; 

Тогда в OnCreate()

@Override 
protected void onCreate(Bundle savedInstanceCreate) 
{ 
    [...]// other onCreate() stuff 
    sr = (Switch) findViewById(R.id.switch_ros); 
    srs = (Switch) findViewById(R.id.switch_ros_stream); 
    sr.setOnCheckedChangeListener(this); 
    srs.setOnCheckedChangeListener(this); 
} 

Тогда OnCheckedChangeListener()

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
{ 
    switch(buttonView.getId()) 
    { 
     case R.id.switch_ros: 
      //boolean wifi_state = isConnected(isChecked); 
      sr.setChecked(isChecked); 
      break; 
     case R.id.switch_ros_stream: 
      [...]// other switch function 
      srs.setChecked(isChecked); 
      break; 
    } 
} 

Edit 1 onCheckedChangeList ener не может найти кнопку переключателя, которую вы пытаетесь включить/выключить. Это связано с тем, что вы выбрасываете более одного переключателя в метод. Вам нужно будет использовать случай переключателя или оператор else, чтобы определить, какую кнопку вы хотите переключить.

+0

Я редактировал вопрос для упрощения и ваших предложений. Но еще не решился – ItsmeJulian

+0

, и ваши изменения были бы вызваны ошибкой нулевого исключения из-за того, что setOnChangedListener для вашей первой кнопки переключателя находится выше начала кнопки. я отредактирую, пожалуйста, сообщите, что isConnected()? –

+1

Мэтью извините за замешательство, другое редактирование. Кажется, ошибка Android – ItsmeJulian