我的活动中有一个切换按钮。当开关打开时,它显示启用对话框并且开关关闭,它显示禁用对话框。
((SwitchCompat) findViewById(R.id.toggleButton)).setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
((StyleableTextView) findViewById(R.id.lbl_toggle_status)).setText("on");
showEnableSharingDialog();
} else {
((StyleableTextView) findViewById(R.id.lbl_toggle_status)).setText("off");
showDiasableShareingDialog();
}
}
});
这是启用对话框:
private void showEnableShareingDialog() {
final CharSequence options[]= getResources().getStringArray(R.array.sharing_options);
AlertDialog.Builder builder = new AlertDialog.Builder(SettingsActivity.this);
builder.setTitle(getString(R.string.you_want_to_enable_prev_sigtings));
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(which==0){
mShareSigtings=true;
mEnableShareing=true;
updateSettings();
} else if(which==1){
mShareSigtings=true;
mEnableShareing=false;
updateSettings();
} else {
/*---todo---*/
dialog.cancel();
}
}
});
builder.show();
}
这是禁用对话框:
private void showDiasableShareingDialog() {
final CharSequence options[]= getResources().getStringArray(R.array.remove_sharing_options);
AlertDialog.Builder builder = new AlertDialog.Builder(SettingsActivity.this);
builder.setTitle(getString(R.string.you_want_to_remove_prev_sigtings));
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
mShareSigtings = false;
mRemovePrevSigtings = true;
updateSettings();
} else if (which == 1) {
mShareSigtings = false;
mRemovePrevSigtings = false;
updateSettings();
} else {
/*---todo---*/
dialog.cancel();
}
}
});
builder.show();
}
在两个对话框中,切换按钮切换状态,即切换处于ON状态,然后按下按钮,弹出对话框,当我按CANCEL时,它从ON变为OFF状态。预期的结果是当按下CANCEL时,切换按钮应保持在其原始位置,即,如果切换为ON,则在按下CANCEL时它应保持为ON。我将如何实现这种操作?
另外,如果我执行类似下面的操作,则按下CANCEL时会同时弹出对话框。
if(((SwitchCompat)findViewById(R.id.toggle3)).isChecked()){
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(false);
}else {
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(true);
}
答案 0 :(得分:2)
你必须知道:
所以,快速解决这个问题,在你将swich set的检查状态设置为onCheckedChanged然后再次放入监听器之前。这是一个例子:
SwitchCompat mySwich = ((SwitchCompat) findViewById(R.id.toggleButton))
OnCheckedChangeListener listener = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
((StyleableTextView) findViewById(R.id.lbl_toggle_status)).setText("on");
showEnableSharingDialog();
} else {
((StyleableTextView) findViewById(R.id.lbl_toggle_status)).setText("off");
showDiasableShareingDialog();
}
}
};
mySwitch.setOnCheckedChangeListener(listener);
在你的CANCEL回调中,你可以做类似的事情:
mySwitch.setOnCheckedChangeListener(null);
if(((SwitchCompat)findViewById(R.id.toggle3)).isChecked()){
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(false);
}else {
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(true);
}
mySwitch.setOnCheckedChangeListener(listener);
答案 1 :(得分:0)
else {
/*---todo---*/
dialog.cancel();
}
上面的其他每个代码都表示取消操作属于你的“其他” - 你可以添加
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(false);
或
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(true);
--- todo --- / comment下面的就在你对话之前的对话框(。);