关于android:如何实现确认(是/否)DialogPreference?

How to implement a confirmation (yes/no) DialogPreference?

如何实现显示简单是/否确认对话框的首选项?

有关示例,请参阅Browser->Setting->Clear Cache


这是一个简单的警报对话框,Federico为您提供了一个可以查找的网站。

以下是如何构建警报对话框的简短示例。

1
2
3
4
5
6
7
8
9
10
new AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Do you really want to whatever?")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int whichButton) {
        Toast.makeText(MainActivity.this,"Yaay", Toast.LENGTH_SHORT).show();
    }})
 .setNegativeButton(android.R.string.no, null).show();


Android附带了一个内置的YesNoPreference类,可以完全按照您的需要执行(带有yes和no选项的确认对话框)。请在此处查看官方源代码。

不幸的是,它位于com.android.internal.preference包中,这意味着它是Android私有API的一部分,您无法从您的应用程序访问它(私有API类如有更改,恕不另行通知,因此Google不允许您访问它他们)。

解决方案:只需从我提供的链接中复制/粘贴官方源代码,即可在应用程序包中重新创建类。我试过这个,它运行正常(没有理由不这样做)。

然后,您可以像任何其他首选项一样将其添加到preferences.xml。例:

1
2
3
4
5
<com.example.myapp.YesNoPreference
    android:dialogMessage="Are you sure you want to revert all settings to their default values?"
    android:key="com.example.myapp.pref_reset_settings_key"
    android:summary="Revert all settings to their default values."
    android:title="Reset Settings" />

看起来像这样:

screenshot


如果您使用首选项xml屏幕,则使用Intent Preference;如果您使用自定义屏幕,则使用Intent Preference,然后代码如下所示

1
2
3
4
5
6
7
intentClearCookies = getPreferenceManager().createPreferenceScreen(this);
    Intent clearcookies = new Intent(PopupPostPref.this, ClearCookies.class);

    intentClearCookies.setIntent(clearcookies);
    intentClearCookies.setTitle(R.string.ClearCookies);
    intentClearCookies.setEnabled(true);
    launchPrefCat.addPreference(intentClearCookies);

然后创建活动类有点像下面,因为不同的人作为不同的方法,你可以使用任何你喜欢的方法这只是一个例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class ClearCookies extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    showDialog();
}

/**
 * @throws NotFoundException
 */
private void showDialog() throws NotFoundException {
    new AlertDialog.Builder(this)
            .setTitle(getResources().getString(R.string.ClearCookies))
            .setMessage(
                    getResources().getString(R.string.ClearCookieQuestion))
            .setIcon(
                    getResources().getDrawable(
                            android.R.drawable.ic_dialog_alert))
            .setPositiveButton(
                    getResources().getString(R.string.PostiveYesButton),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            //Do Something Here

                        }
                    })
            .setNegativeButton(
                    getResources().getString(R.string.NegativeNoButton),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            //Do Something Here
                        }
                    }).show();
}}

如前所述,有很多方法可以做到这一点。这是你可以完成任务的方式之一,如果你觉得你已经得到了你想要的东西,请接受答案。


我在这里回答了一个类似的问题,其中有一个如何使用DialogPreference的例子。

从XML创建DialogPreference