Android 在取消对话框上恢复切换按钮的状态
我的活动中有一个切换按钮。开关打开时,显示启用对话框;开关关闭时,显示禁用对话框Android 在取消对话框上恢复切换按钮的状态,android,android-togglebutton,switchcompat,Android,Android Togglebutton,Switchcompat,我的活动中有一个切换按钮。开关打开时,显示启用对话框;开关关闭时,显示禁用对话框 ((SwitchCompat) findViewById(R.id.toggleButton)).setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
((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();
}
这是“禁用”对话框:
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();
}
在这两个对话框中,“切换”按钮切换其状态,即,假设切换处于打开状态,然后我按下按钮,对话框弹出,当我按下“取消”时,它将从打开状态变为关闭状态。预期结果是,当按下“取消”按钮时,切换按钮应保持在其原始位置,即,如果“切换”处于打开状态,则按下“取消”按钮时,切换按钮应保持打开状态。我将如何实现这种操作
此外,如果我执行以下操作,则按CANCEL时两个对话框会持续弹出
if(((SwitchCompat)findViewById(R.id.toggle3)).isChecked()){
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(false);
}else {
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(true);
}
else{
/*---待办事项---*/
dialog.cancel();
}
您必须知道:
- onCheckedChanged在SwichCompat的状态更改后调用
- 如果将OnCheckedChangeListener添加到SwitchCompat,则在开关状态发生任何更改后(通过代码或手动按下)将触发此侦听器
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);
在取消回调时,您可以执行以下操作:
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);
设置开关切换时,setOnChangeListener的条件导致了问题。当调用用于通过.setChecked以编程方式切换开关的代码时,它会被触发。我必须为两个对话框或其中任何一个添加它吗?@Raj尝试一个或两个。我按照你说的那样尝试过,结果它在一种情况下失败了,这取决于你把它放在哪里。对话框显示了两次。谢谢你的帮助,这样做解决了我的问题