首先,我还是这个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();
}
}
});
答案 0 :(得分:4)
开关状态丢失,因为当您离开时,活动会被销毁。所以你应该考虑保存mySwitch的状态。您可以使用SharedPreferences来完成此操作,或者......
你应该使用onPause()方法来编写任何持久数据(例如 用户编辑)到存储。另外,该方法 在放置活动之前调用onSaveInstanceState(Bundle) 这样的背景状态,可以让你省去任何动态 实例状态在您的活动中进入给定的Bundle,稍后 如果需要重新创建活动,则在onCreate(Bundle)中收到。 有关如何使用的更多信息,请参阅“进程生命周期”部分 流程的生命周期与其托管的活动相关联。注意 将持久数据保存在onPause()而不是 onSaveInstanceState(Bundle)因为后者不属于 生命周期回调,因此不会在每种情况下调用 在其文档中描述。
答案 1 :(得分: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();
}
}
});
答案 2 :(得分:0)
我认为你还没有学过碎片,仍然使用活动。研究活动生命周期和使用片段。
这就是为什么您的活动始终将您的开关显示为true。
mySwitch.setChecked(true);
答案 3 :(得分:0)
使用此=>设置您的switech; mySwitch =(Switch)findViewById(R.id.switch1); mySwitch.setChecked(假); //设置False而不是true 现在当你开始活动时,开关将关闭。