creating a DialogPreference from XML creating a DialogPreference from XML android android

creating a DialogPreference from XML


Here is an example of how to use the dialog preference (subclassing as you mentioned).

package dk.myapp.views;import android.content.Context;import android.preference.DialogPreference;import android.util.AttributeSet;/** * The OptionDialogPreference will display a dialog, and will persist the * <code>true</code> when pressing the positive button and <code>false</code> * otherwise. It will persist to the android:key specified in xml-preference. */public class OptionDialogPreference extends DialogPreference {    public OptionDialogPreference(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onDialogClosed(boolean positiveResult) {        super.onDialogClosed(positiveResult);        persistBoolean(positiveResult);    }}

The preferences.xml should contain

<dk.myapp.views.OptionDialogPreference            android:key="@string/prefKeyResetQuests"            android:dialogIcon="@android:drawable/ic_dialog_alert"            android:title="Reset Quests"            android:summary="Reset all quest-progress."            android:dialogMessage="Are you sure you wish to reset your quest progress? This action cannot be undone!"            android:positiveButtonText="Clear Quests"            android:negativeButtonText="Cancel"/>

I have a res/value containing (though the key-name can also be declared explicitly above).

<string name="prefKeyResetQuests">resetQuests</string>  

My PreferenceActivity does the actual resetting from onPause. Note that onStop may be too late since the onStop will not always be called immediately after pressing back:

@Overridepublic void onPause() {    SharedPreferences prefs = android.preference.PreferenceManager.        getDefaultSharedPreferences(getBaseContext());    if(prefs.getBoolean(        getResources().getString(R.string.prefKeyResetQuests), false)) {        // apply reset, and then set the pref-value back to false    }}

Or equivalently since we are still in the PreferenceActivity:

@Overrideprotected void onPause() {    Preference prefResetQuests =        findPreference(getResources().getString(R.string.prefKeyResetQuests));    if(prefResetQuests.getSharedPreferences().        getBoolean(prefResetQuests.getKey(), false)){        // apply reset, and then set the pref-value back to false     }}


This one is weird, you need to subclass DialogPreference. The subclass does not need to do anything. So

public class MyDialogPreference extends DialogPreference {    public MyDialogPreference(Context context, AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub    }} 

can be instantiated. While a plane old DialogPreference can not. Very weird, they should be the exact same thing.


First:

Create your own class which extends DialogPreference as bellow:

package com.test.view;import android.preference.DialogPreference;public class DialogExPreference extends DialogPreference {    public DialogExPreference(Context oContext, AttributeSet attrs)    {        super(oContext, attrs);         }}

Second:

Modify the xml file as bellow:

<PreferenceScreen    xmlns:android="http://schemas.android.com/apk/res/android">    <com.test.view.DialogExPreference        android:title="@string/title"        android:dialogMessage="@string/lite"                              android:negativeButtonText="test"/> </PreferenceScreen>

Then it's OK.