看到网上DialogPreference的用法,让我很心痛...
Demo :
主程序如下:
package com.example.androiddialogperencetest; import android.os.Bundle; import android.preference.PreferenceActivity; import android.app.Activity; import android.content.SharedPreferences; import android.view.Menu; public class MainActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.addPreferencesFromResource(R.xml.prefs_dialog); } @Override public 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 } } }
DialogPreference是个抽象的,不能直接使用,需要重写:
package com.example.androiddialogperencetest; import android.content.Context; import android.preference.DialogPreference; import android.util.AttributeSet; public class MyDialogShow extends DialogPreference { public MyDialogShow(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub //super.setDialogLayoutResource(R.xml.prefs_dialog); //super.setDialogIcon(R.drawable.ic); } public MyDialogShow(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub //super.setDialogLayoutResource(R.xml.prefs_dialog); //super.setDialogIcon(R.drawable.ic); } @Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); persistBoolean(positiveResult); } }
strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">AndroidDialogPerenceTest</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="prefKeyResetQuests">resetQuests</string> </resources>
prefs_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <com.example.androiddialogperencetest.MyDialogShow 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"/> </PreferenceScreen>
运行结果: