如何仅在确认对话框后翻转开关的检查状态? [英] How to flip the checked status of a Switch only after confirm dialog?

查看:95
本文介绍了如何仅在确认对话框后翻转开关的检查状态?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题是-当我单击 < ; Switch> ,它会先切换,然后调用 OnCheckedChangeListener



我想要的是>

< Switch> ->我显示一个AlertDialog->如果按是或否->然后用 setChecked(boolean),[boolean =如果按yes,则为true,如果按no,则为false]。



问题:单击< Switch> 时,它会自动翻转。我想先从AlertDialog中使用是或否来限定它。

  sw_enableDisable 
.setOnCheckedChangeListener(new OnCheckedChangeListener( ){

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked){
if(isChecked){

AlertDialog。生成器alertDialogBu​​ilder = new AlertDialog.Builder(
getActivity());

alertDialogBu​​ilder
.setMessage(
确定要启用吗?。)
.setCancelable(true)
.setPositiveButton(
getString( YES),
新的DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog,
int which){

dialog.cancel();
}
})

.setNegativeButton(
getString( NO),
新DialogInterface.OnClickListener(){

@Override
public void onClick(DialogInterface对话框,
int){

dialog.cancel();
}
});

AlertDialog alertDialog = alertDialogBu​​ilder.create();
alertDialog.show();
sw_enDis_alreadyClicked = true;

}否则{
AlertDialog.Builder alertDialogBu​​ilder = new AlertDialog.Builder(
getActivity());
alertDialogBu​​ilder
.setMessage(
确定要禁用吗?)
.setCancelable(true)
.setPositiveButton(
getString( YES ),
新的DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog,
int which){
dialog.cancel();
}
})

.setNegativeButton(
getString( NO),
新DialogInterface.OnClickListener(){

@Override
public void onClick(DialogInterface对话框,
int其中){

dialog.cancel();
}
});

AlertDialog alertDialog = alertDialogBu​​ilder.create();
alertDialog.show();
}
}
});


解决方案

尝试此代码。它对我有用:

 受保护的无效onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
// ...
切换switchButton =(切换)findViewById(R.id.my_switch_id);

switchButton.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v){
final Switch btn =(Switch) v;
最终布尔值switchChecked = btn.isChecked();

if(btn.isChecked()){
btn.setChecked(false);
} else {
btn.setChecked(true);
}

字符串消息=确定要禁用此设置吗?;
if(!btn。 isChecked()){
message =确定要启用此设置吗?;
}
AlertDialog.Builder builder = new AlertDialog.Builder(this); //更改如果您正在片段
builder.setMessage(message)
.setPositiveButton( Ok,新的DialogInterface.OnClickListener(){
@覆写
public void onClick(DialogInterface dialog,int i){
//如果(switchChecked){
btn.setChecked(true);单击是按钮

} else {
btn.setChecked(false);
}
}
})
.setNegativeButton( Cancel,null)
.show();
}
});


My problem is - when I click on a <Switch>, it gets toggled first and then the OnCheckedChangeListener is called.

What I would like is this:

<Switch> is clicked --> I show an AlertDialog --> If pressed yes or no --> Then flip ` with setChecked(boolean), [boolean = true if pressed yes, and false if pressed no].

Problem: When <Switch> is clicked, it gets flipped automatically. I want to qualify it with a yes or no from a AlertDialog first.

sw_enableDisable
                .setOnCheckedChangeListener(new OnCheckedChangeListener() {

                    @Override
                    public void onCheckedChanged(CompoundButton buttonView,
                                                 boolean isChecked) {
                        if (isChecked) {

                            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                                    getActivity());

                            alertDialogBuilder
                                    .setMessage(
                                            "Sure you want to enable?. ")
                                    .setCancelable(true)
                                    .setPositiveButton(
                                            getString("YES"),
                                            new DialogInterface.OnClickListener() {
                                                @Override
                                                public void onClick(DialogInterface dialog,
                                                                    int which) {

                                                    dialog.cancel();
                                                }
                                            })

                                    .setNegativeButton(
                                            getString("NO"),
                                            new DialogInterface.OnClickListener() {

                                                @Override
                                                public void onClick(DialogInterface dialog,
                                                                    int which) {

                                                    dialog.cancel();
                                                }
                                            });

                            AlertDialog alertDialog = alertDialogBuilder.create();
                            alertDialog.show();
                            sw_enDis_alreadyClicked = true;

                        } else {
                            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                                    getActivity());
                            alertDialogBuilder
                                    .setMessage(
                                            "Sure you want to disable?")
                                    .setCancelable(true)
                                    .setPositiveButton(
                                            getString("YES"),
                                            new DialogInterface.OnClickListener() {
                                                @Override
                                                public void onClick(DialogInterface dialog,
                                                                    int which) {
                                                    dialog.cancel();
                                                }
                                            })

                                    .setNegativeButton(
                                            getString("NO"),
                                            new DialogInterface.OnClickListener() {

                                                @Override
                                                public void onClick(DialogInterface dialog,
                                                                    int which) {

                                                    dialog.cancel();
                                                }
                                            });

                            AlertDialog alertDialog = alertDialogBuilder.create();
                            alertDialog.show();
                        }
                    }
                });

解决方案

Try this code. It worked for me:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...
    Switch switchButton = (Switch) findViewById(R.id.my_switch_id);

    switchButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            final Switch btn = (Switch) v;
            final boolean switchChecked = btn.isChecked();

            if (btn.isChecked()) {
                btn.setChecked(false);
            } else {
                btn.setChecked(true);
            }

            String message = "Are you sure you want to disable this setting?";
            if (!btn.isChecked()) {
                message = "Are you sure you want to enable this setting?";
            }
            AlertDialog.Builder builder = new AlertDialog.Builder(this); // Change "this" to `getActivity()` if you're using this on a fragment
            builder.setMessage(message)
                   .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int i) {
                            // "Yes" button was clicked
                            if (switchChecked) {
                                btn.setChecked(true);
                            } else {
                                btn.setChecked(false);
                            }
                        }
                    })
                   .setNegativeButton("Cancel", null)
                   .show();
        }
    });

这篇关于如何仅在确认对话框后翻转开关的检查状态?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆