2015-01-07 3 views
0

Сначала я все еще новичок в этом программировании для Android. Я хочу спросить, почему мой переключатель всегда включается, когда я запускаю свое приложение. Когда я выключу его и перейду к другому действию и вернусь к первому действию, кнопка переключателя снова включится. Любая подсказка? Я пробовал Android ToggleButton always check, но я все еще не понимаю.Кнопка переключения всегда на

switchStatus = (TextView) findViewById(R.id.View1); 
    mySwitch.setChecked(true); 
    mySwitch = (Switch) findViewById(R.id.switch1); 

    mySwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, 
    boolean isChecked) { 

     if(mySwitch.isChecked()){ 
     mySwitch.setChecked(true); 
     switchStatus.setText("Switch is currently On"); 
     onResume();   
     sendButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
     } 
     });   
     } 
     else{ 
     mySwitch.setChecked(false); 
     switchStatus.setText("Switch is currently OFF"); 
     onPause(); 
     } 
     } 
     }); 

ответ

3

Состояние переключателя теряется, поскольку действие прекращается, когда вы его покидаете. Поэтому вам стоит рассмотреть возможность сохранения состояния mySwitch. Вы можете использовать SharedPreferences для acomplish это, или ...

вы должны использовать метод OnPause() для записи каких-либо постоянных данных (такие как пользователь редактирует) для хранения. Кроме того, вызывается метод onSaveInstanceState (Bundle) перед размещением активности в таким фоновым состоянием, что позволяет сэкономить любое динамическое состояние экземпляра в вашей деятельности в данный комплект, который будет позже , полученный в onCreate (Bundle), если деятельность необходимо воссоздать. См. Раздел «Процесс жизненного цикла» для получения дополнительной информации о том, как жизненный цикл процесса связан с действиями, которые он проводит. Примечание , что важно сохранить постоянные данные в onPause() вместо onSaveInstanceState (Bundle), потому что последний не является частью обратных вызовов жизненного цикла , поэтому не будет вызываться в каждой ситуации, как , описанной в его документации.

0

Я предполагаю, что вы еще не узнали о фрагментах и ​​все еще используете действия. Изучите жизненный цикл деятельности и используйте фрагменты.

Вот почему ваша деятельность всегда показывает ваш переключатель как истинный.

mySwitch.setChecked(true);

0

Установите switech выключить с помощью этого => mySwitch = (переключатель) findViewById (R.id.switch1); mySwitch.setChecked (false); // set False Вместо true
теперь, когда вы начинаете свою деятельность, переключатель отключается.

+0

но когда я перехожу к другому действию, кнопка переключателя возвращается снова так же, как и раньше, как мне сохранить значение кнопки переключателя, даже когда я перехожу к другому действию? – noob

1

Вы можете добавить sharedPreference, чтобы сохранить значение, когда вы нажали на переключатель, чтобы избежать потери значения. Вы можете попробовать этот код, хотя это еще не проверено.

SharedPreferences prefs; // declare the sharedPreference 
boolean value = false; // default value if no value was found 
String key = "key"; // use this key to retrieve the value 
String sharedPrefName = "isMySwitchChecked"; // name of your sharedPreference 

prefs = context.getSharedPreferences(sharedPrefName, Context.MODE_PRIVATE); 
value = prefs.getBoolean(key, value); // retrieve the value of your key 

switchStatus = (TextView) findViewById(R.id.View1); 
mySwitch = (Switch) findViewById(R.id.switch1); 
mySwitch.setChecked(value); 

mySwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

if(mySwitch.isChecked()){ 

switchStatus.setText("Switch is currently On"); 
prefs = context.getSharedPreferences(sharedPrefName, Context.MODE_PRIVATE); 
prefs.edit().putBoolean(key, true).commit();  
onResume();   

sendButton.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View arg0) { } 

});   

} else { 

prefs = context.getSharedPreferences(sharedPrefName, Context.MODE_PRIVATE); 
prefs.edit().putBoolean(key, false).commit(); 
switchStatus.setText("Switch is currently OFF"); 
onPause(); 

    } 
} 
}); 
+0

Почему, когда я пытаюсь запустить в своем телефоне, приложение просто принудительно закрывает? btw, я использовал андроид KitKat – noob

+0

на какой конкретной строке в коде это сбой? – mgcaguioa

+0

i dunno, потому что в моей строке кода нет ошибки, это похоже на то, что моя активность может создать xml – noob

Смежные вопросы