如何在Android中为SwitchPreference实现确认对话框?

3
当用户更改 switchpreference 的值时,我需要显示确认对话框并仅在用户单击肯定按钮时更改值,如果用户单击否定,则不应更改值。

在 onPreferenceChange 里调用你的确认。 - Sathish Kumar J
1
不,它不起作用。因为在show()之后的代码正在执行,如果我点击否定按钮,switchpreference应该被编程更改,然后将调用onpreferencechange。 - Pein
你找到解决方案了吗? - CaptRisky
2个回答

1

设置您的首选项的OnPreferenceChangeListener并返回false以抑制修改。从那里显示对话框并手动更改您的首选项值。

val myPreference = preferenceScreen.findPreference<SwitchPreference>("my_pref_key")!!
myPreference.setOnPreferenceChangeListener { _, _ ->
        MaterialAlertDialogBuilder(context)/* ... */.setPositiveButton("Yes") { _, _ ->
                myPreference.isChecked = !myPreference.isChecked
        }.show()
        false // skip the default behavior 
}

0

我认为你可以使用警示对话框来进行确认操作,其中包括正面和负面按钮。

在正面按钮中更改数值,在负面按钮中保留代码(不执行任何操作)。

  new AlertDialog.Builder(this).
                                        setTitle("title").setIcon(R.drawable.ic_launcher)
                                        .setMessage(getResources().getString(R.string.message))
                                        .setPositiveButton("Yes", new DialogInterface.OnClickListener()
                                        {
                                            public void onClick(DialogInterface dialog, int which) {

//change value here
                                            }
                                        }) .setNegativeButton("No", new DialogInterface.OnClickListener()
                                {
                                    public void onClick(DialogInterface dialog, int which) {
                                        // do nothing
                                    }
                                }).show();

我尝试过了,但在负面点击中,我们应该恢复值,因为当onpreferenchechange被调用时它已经改变了。因此,在负面点击中,我们应该撤销更改并调用onpreferencehcnage。 - Pein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接