使用确认对话框进行首选项

时间:2014-08-18 11:24:16

标签: android android-preferences

我很难用Dialog创建一个Preference,网站上建议的方法都不适合我。所以这就是我的第一个。在MainActivity中我有这个

@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>

我希望当我单击此选项时,会出现一个带有“是”和“否”按钮的对话框,因此我可以在某处定义按钮以编程方式执行的操作。我该怎么办?

3 个答案:

答案 0 :(得分:5)

您可以延长DialogPreference。覆盖onDialogClosed方法,该方法在Dialog关闭时调用。该方法的参数指示用户是选择了positive还是negative按钮。

CustomDialogPreference.java

    public class CustomDialogPreference extends DialogPreference {
        public CustomDialogPreference(Context context, AttributeSet attrs) {
            super(context, attrs);

            // Set the layout here                
            setDialogLayoutResource(R.layout.custom_dialog);

            setPositiveButtonText(android.R.string.ok);
            setNegativeButtonText(android.R.string.cancel);

            setDialogIcon(null);
        }

        @Override
        protected void onDialogClosed(boolean positiveResult) {
            // When the user selects "OK", persist the new value
            if (positiveResult) {
                // User selected OK
            } else {
                // User selected Cancel
            }
        }

    }

的preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <com.example.test1.CustomDialogPreference
        android:key="pref_dialog"
        android:title="dialog"/>
</PreferenceScreen>

您可以参考官方Settings documentation

答案 1 :(得分:0)

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

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

<item android:id="@+id/action_settings"
    android:title="@string/action_settings"
    android:orderInCategory="99"
    android:showAsAction="ifRoom"/>

然后为ActionBar上的Setting按钮设置Listener:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        //Start your new Activity here
        return true;
    }
    return super.onOptionsItemSelected(item);
}

您仍然可以使用我的代码在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();

答案 2 :(得分:0)

如果使用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>

然后绑定片段优先

 Preference clear = findPreference("absence_data");

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

                return true;
            }
        });

alertForClearAbsenceData函数,下面是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();
    }

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