在取消对话框中恢复切换按钮的状态
Restore state of toggle button on canceling dialog
我的 activity 中有一个切换按钮。当开关打开时,显示启用对话框,开关关闭时,显示禁用对话框。
((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();
}
在这两个对话框中,切换按钮切换它的状态,即说切换处于打开状态然后我按下按钮,弹出对话框,当我按下取消时它从打开状态变为关闭状态。预期结果是当按下 CANCEL 时,切换按钮应保持在其原始位置,即,如果切换为 ON,则在按下 CANCEL 时它应保持为 ON。这种操作要怎么实现?
此外,如果我执行类似下面的操作,则在按下“取消”时两个对话框都会不断弹出。
if(((SwitchCompat)findViewById(R.id.toggle3)).isChecked()){
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(false);
}else {
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(true);
}
else {
/*---todo---*/
dialog.cancel();
}
在上面的每个其他代码中表示针对您的情况 "else" 的取消操作 - 您可以添加
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(false);
或
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(true);
在 /---todo---/ 评论下方,就在你 dialog.cancel();
之前
你必须知道:
- onCheckedChanged 在 SwichCompat 的状态改变后被调用。
- 如果您向 SwitchCompat 添加了 OnCheckedChangeListener,则此侦听器将在开关状态发生任何变化(通过代码或手动按下)后触发
因此,一个快速修复方法是,在您更改开关的检查状态之前将 null 设置为 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);
在您的取消回调中,您可以执行类似的操作:
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);
我的 activity 中有一个切换按钮。当开关打开时,显示启用对话框,开关关闭时,显示禁用对话框。
((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();
}
在这两个对话框中,切换按钮切换它的状态,即说切换处于打开状态然后我按下按钮,弹出对话框,当我按下取消时它从打开状态变为关闭状态。预期结果是当按下 CANCEL 时,切换按钮应保持在其原始位置,即,如果切换为 ON,则在按下 CANCEL 时它应保持为 ON。这种操作要怎么实现?
此外,如果我执行类似下面的操作,则在按下“取消”时两个对话框都会不断弹出。
if(((SwitchCompat)findViewById(R.id.toggle3)).isChecked()){
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(false);
}else {
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(true);
}
else {
/*---todo---*/
dialog.cancel();
}
在上面的每个其他代码中表示针对您的情况 "else" 的取消操作 - 您可以添加
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(false);
或
((SwitchCompat)findViewById(R.id.toggle3)).setChecked(true);
在 /---todo---/ 评论下方,就在你 dialog.cancel();
之前你必须知道:
- onCheckedChanged 在 SwichCompat 的状态改变后被调用。
- 如果您向 SwitchCompat 添加了 OnCheckedChangeListener,则此侦听器将在开关状态发生任何变化(通过代码或手动按下)后触发
因此,一个快速修复方法是,在您更改开关的检查状态之前将 null 设置为 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);
在您的取消回调中,您可以执行类似的操作:
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);