开关按钮始终打开

时间:2015-01-07 08:12:27

标签: android

首先,我还是这个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();
      }
      }
      });

4 个答案:

答案 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 现在当你开始活动时,开关将关闭。