如何实现确认(是/否)DialogPreference?


Answers:


292

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

这是一个如何构建警报对话框的简短示例。

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();

3
我知道如何建立一个对话框,但是我对首选项有疑问。
sh1ng 2011年

1
您的问题与偏好有关?好的。在这里看看:kaloer.com/android-preferences
Maaalte 2011年

1
我已经阅读了此资料。我可以创建订阅OnClick的自定义首选项并进行处理,但这是最简单的方法吗?
sh1ng 2011年

我认为是这样,至少我不知道其他任何一种更简单的方法。
Maaalte 2011年

1
使用import android.support.v7.app.AlertDialog; 比主题更好的外观
majurageer比

9

Android随附了一个内置的YesNoPreference类,该类完全可以满足您的要求(带有yes和no options的确认对话框)。请参阅此处的官方源代码。

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

解决方案:只需复制/粘贴我提供的链接中的官方源代码,即可在应用程序包中重新创建该类。我已经尝试过了,而且效果很好(没有理由不这样做)。

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

<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" />

看起来像这样:

屏幕截图


1
很好的解决方案!但是此类的构造函数之一存在问题!它引用资源attr(com.android.internal.R.attr.yesNoPreferenceStyle)!哪些无法解决。解决方法是什么?我必须在自己的项目中创建一个吗?!
reubenjohn 2014年

3

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

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);

然后创建活动类,如下所示:作为不同的人,您可以使用任何喜欢的方法作为不同的方法,这只是一个示例。

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();
}}

如前所述,有很多方法可以做到这一点。这是您完成任务的一种方式,如果您认为自己已经获得了想要的,请接受答案。


谢谢!这几乎正​​是我的应用程序所需要的,因为我是从服务触发对话框的,因此我需要一个活动来托管该对话框。
Ralph Ritoch 2014年

爱它。恕我直言,冗长但又批准且正确的方式
John
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.