Android ToggleButton切换状态问题

时间:2015-11-10 07:31:15

标签: android togglebutton ischecked

我是android新手。我正在创建一个使用切换按钮的应用程序。我希望切换按钮在按钮处于检查状态时执行某些任务,并在取消选中按钮时执行其他任务。我希望切换按钮即使在用户关闭应用程序时(通过按下后退开关)也能保持其状态并返回。我设法通过使用共享首选项来完成它,但问题是,当用户打开切换按钮并返回并再次返回时,任务将再次完成。有没有办法保持我的切换按钮处于状态,而不是与它相关的任务?抱歉我的英语不好:)

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);
    }

    }

   }``

1 个答案:

答案 0 :(得分:2)

只需在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
           }
        }

});

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

编辑:
用于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