Android 带有确认对话框的首选项

Android 带有确认对话框的首选项,android,android-preferences,Android,Android Preferences,我很难选择Dialog,网站上建议的方法都不适合我。这是我首先得到的。我有这个 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_stage_1, menu); return true; } 这将打开菜单,当您选择设置时,在下一个屏幕中只有一个首选项,即从preferences.xml创建的首选项 <PreferenceSc

我很难选择Dialog,网站上建议的方法都不适合我。这是我首先得到的。我有这个

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_stage_1, menu);
    return true;
}
这将打开菜单,当您选择设置时,在下一个屏幕中只有一个首选项,即从preferences.xml创建的首选项

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

<Preference
    android:summary="clears all data"
    android:title="Reset Data" >
    <intent
        android:targetClass="com.example.myapp.settings.DialogActivity"
        android:targetPackage="com.example.myapp" >
    </intent>
</Preference>


我想当我点击这个选项时,会出现一个对话框,里面有“是”和“否”按钮,这样我就可以在某个地方定义这些按钮的编程功能。如何操作?

在这种情况下,如果您可以使用Android Studio,您可以右键单击包含活动的文件夹,然后选择创建新的
设置活动

然后在MainActivity中的xml for ActionBar中,设置如下设置按钮:

<item android:id="@+id/action_settings"
    android:title="@string/action_settings"
    android:orderInCategory="99"
    android:showAsAction="ifRoom"/>
您仍然可以在
SettingsActivity
中使用下面的“我的代码”在侦听器中构建AlertDialog

AlertDialog.Builder alert = new AlertDialog.Builder(self);
alert.setTitle(getResources().getString(R.string.action_about));
//Set up your AlertDialog and buttons
alert.setMessage(message);
alert.setNegativeButton("Okay", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        // Canceled.
    }
});
alert.setCancelable(true);
alert.show();
你可以延长时间。重写
onDialogClosed
方法,该方法在
对话框关闭时调用。该方法的参数指示用户是选择了
正按钮
还是
负按钮

CustomDialogPreference.java:

preferences.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

<Preference
    android:summary="clears all data"
    android:title="Reset Data" >
    <intent
        android:targetClass="com.example.myapp.settings.DialogActivity"
        android:targetPackage="com.example.myapp" >
    </intent>
</Preference>


您可以参考官方的。

如果您使用v7支持库,它有点复杂。。。但我更喜欢以下几点:

首先创造偏好

<PreferenceCategory
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:title="@string/settings_absence_category_data">

        <Preference
            android:key="absence_data"
            android:title="@string/settings_absence_data_clear"></Preference>
    </PreferenceCategory>
下面的AlertForClearAbscenceData函数用于alertdialog

 private void alertForClearAbsenceData(){

        AlertDialog.Builder alert = new AlertDialog.Builder(getMainActivity());

        alert.setTitle(getString(R.string.fragment_absence_alert_title));
        alert.setMessage(getString(R.string.fragment_absence_alert_message));

        alert.setCancelable(false);
        alert.setPositiveButton(R.string.fragment_absence_ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {


            }
        });
        alert.show();
    }

这是如何确认警报对话框的示例

我将此方法放置在何处,如何启动具有此方法的类,请解释更多我实际上希望此对话框显示在PreferenceActivity中,例如当我从MainActivity的菜单中选择Settings时,PreferenceActivity打开,第一个选项是Clear Data,所以我想展示一个带有确认的对话框。在这种情况下,如果可以使用Android Studio,则可以右键单击包含活动的文件夹,然后选择创建新的
设置活动。您仍然可以使用我的代码在
SettingsActivity
中的侦听器中构建AlertDialog。我在回答中添加了一些其他代码。我想补充的是,您不必覆盖布局。如果您只想显示带有默认确认布局的自定义消息,可以在构造函数中使用
setDialogMessage()
方法,将资源ID设置为字符串值。
<PreferenceCategory
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:title="@string/settings_absence_category_data">

        <Preference
            android:key="absence_data"
            android:title="@string/settings_absence_data_clear"></Preference>
    </PreferenceCategory>
 Preference clear = findPreference("absence_data");

        clear.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
                alertForClearAbsenceData();

                return true;
            }
        });
 private void alertForClearAbsenceData(){

        AlertDialog.Builder alert = new AlertDialog.Builder(getMainActivity());

        alert.setTitle(getString(R.string.fragment_absence_alert_title));
        alert.setMessage(getString(R.string.fragment_absence_alert_message));

        alert.setCancelable(false);
        alert.setPositiveButton(R.string.fragment_absence_ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {


            }
        });
        alert.show();
    }