【问题标题】:Android ToggleButton toggle state issueAndroid ToggleButton 切换状态问题
【发布时间】:2016-02-11 00:40:35
【问题描述】:

我是安卓新手。我正在创建一个使用切换按钮的应用程序。我希望切换按钮在按钮处于选中状态时执行一些任务,并在按钮未选中时执行一些其他任务。而且我希望切换按钮即使在用户关闭应用程序(通过按下返回开关)并返回时也能保持其状态。我设法通过使用共享偏好来完成它,但问题是当用户打开切换按钮并返回并再次返回时,任务又完成了。有没有办法让我的切换按钮保持在状态,而不是与它相关的任务?对不起我的英语不好:)

public class MainActivity extends AppCompatActivity {
 ToggleButton onoff;
 public static Bundle bundle=new Bundle();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    onoff = (ToggleButton) findViewById(R.id.toggleButton);

    onoff.setChecked(false);

    onoff.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
             if (isChecked) {

                // do some tasks here
              } else {

                //do some tasks here
               }
            }

    });
}


     @Override
     public void onPause(){
     super.onPause();
     bundle.putBoolean("ToggleButtonState", onoff.isChecked());
                    }

    @Override
    public void onResume(){
    super.onResume();
    if(bundle.getBoolean("ToggleButtonState",false))
    {
        onoff.setChecked(true);
    }

    }

   }``

【问题讨论】:

    标签: android togglebutton ischecked


    【解决方案1】:

    只需向您的 OnCheckedChangeListener 添加另一个条件:

    onoff.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
             if (isChecked && !bundle.getBoolean("ToggleButtonState",false) {
    
                // do some tasks here
              } else if(!isChecked){ //optional + , your preference on what to to :)
    
                //do some tasks here
               }
            }
    
    });
    

    所以,当你返回时,你的按钮被选中,但你保存的布尔值也是 true,它不会执行你的任务。

    编辑:
    onSaveInstanceState 一起使用:

    在您的活动中,添加以下方法:

    @Override
    protected void onSaveInstanceState(Bundle outState) {
         outState.putBoolean("ToggleButtonState", onoff.isChecked());
    
        super.onSaveInstanceState(outState);
    }
    

    并在onCreate() 中的findViewById(...) 下检索此布尔值:

    boolean checkedStatus = savedInstanceState.getBoolean("ToggleButtonState", false);
    onoff.setChecked(checkedStatus);
    

    更多信息请访问Recreating an Activity

    【讨论】:

    • 你能告诉我如何使用 onSavedInstanceState 来实现吗?
    • 编辑了我的答案,但你可以自己解决这个问题,请先谷歌。 ;)
    • 再次感谢您.. 我自己尝试过,但无法成功。 :)
    猜你喜欢
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多