создание диалога DialogPreference из XML

Я пытаюсь использовать android.preference.DialogPreference завышенный от XML, но в документации, похоже, отсутствуют некоторые существенные биты, и я не могу найти рабочий пример в любом месте. Теперь мой XML выглядит так (я пробовал много перестановок, но это кажется разумным минимумом):

  

Мое предположение в этот момент состоит в том, что для подclassа DialogPreference не использовать его напрямую. Во-первых, я не могу найти способ связать фактическое значение предпочтения с элементом в самом диалоге, который при отражении отчасти является подделкой. А также, глядя на источник на DialogPreference.java похоже, это подтверждает. И я также заметил, что официальная документация относится к нему как к «базовому classу». Но, по крайней мере, было бы неплохо создать достаточно чистый источник в сети, который помог бы следующим N людям понять это быстрее, чем я.

Для записи файл журнала выглядит следующим образом:

 I/ActivityManager( 61): Starting: Intent { cmp=org.jeremy.android/.PreferencesActivity } from pid 2755 W/Resources( 2755): Converting to string: TypedValue{t=0x10/d=0x4b0 a=-1} W/Resources( 2755): Converting to string: TypedValue{t=0x10/d=0x20 a=-1} D/AndroidRuntime( 2755): Shutting down VM W/dalvikvm( 2755): threadid=1: thread exiting with uncaught exception (group=0x40015560) E/AndroidRuntime( 2755): FATAL EXCEPTION: main E/AndroidRuntime( 2755): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.jeremy.android/org.jeremy.android.PreferencesActivity}: android.view.InflateException: Binary XML file line #28: Error inflating class java.lang.reflect.Constructor E/AndroidRuntime( 2755): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) E/AndroidRuntime( 2755): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) E/AndroidRuntime( 2755): at android.app.ActivityThread.access$1500(ActivityThread.java:117) E/AndroidRuntime( 2755): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) E/AndroidRuntime( 2755): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime( 2755): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime( 2755): at android.app.ActivityThread.main(ActivityThread.java:3683) E/AndroidRuntime( 2755): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime( 2755): at java.lang.reflect.Method.invoke(Method.java:507) E/AndroidRuntime( 2755): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) E/AndroidRuntime( 2755): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) E/AndroidRuntime( 2755): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime( 2755): Caused by: android.view.InflateException: Binary XML file line #28: Error inflating class java.lang.reflect.Constructor E/AndroidRuntime( 2755): at android.preference.GenericInflater.createItem(GenericInflater.java:397) E/AndroidRuntime( 2755): at android.preference.GenericInflater.onCreateItem(GenericInflater.java:417) E/AndroidRuntime( 2755): at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:428) E/AndroidRuntime( 2755): at android.preference.GenericInflater.rInflate(GenericInflater.java:481) E/AndroidRuntime( 2755): at android.preference.GenericInflater.rInflate(GenericInflater.java:493) E/AndroidRuntime( 2755): at android.preference.GenericInflater.inflate(GenericInflater.java:326) E/AndroidRuntime( 2755): at android.preference.GenericInflater.inflate(GenericInflater.java:263) E/AndroidRuntime( 2755): at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:251) E/AndroidRuntime( 2755): at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:262) E/AndroidRuntime( 2755): at org.jeremy.android.PreferencesActivity.onCreate(PreferencesActivity.java:40) E/AndroidRuntime( 2755): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) E/AndroidRuntime( 2755): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) E/AndroidRuntime( 2755): ... 11 more E/AndroidRuntime( 2755): Caused by: java.lang.InstantiationException: android.preference.DialogPreference E/AndroidRuntime( 2755): at java.lang.reflect.Constructor.constructNative(Native Method) E/AndroidRuntime( 2755): at java.lang.reflect.Constructor.newInstance(Constructor.java:415) E/AndroidRuntime( 2755): at android.preference.GenericInflater.createItem(GenericInflater.java:383) E/AndroidRuntime( 2755): ... 22 more W/ActivityManager( 61): Force finishing activity org.jeremy.android/.PreferencesActivity W/ActivityManager( 61): Force finishing activity org.jeremy.android/.SplashActivity 

    Это странно, вам нужно подclassировать DialogPreference . Подclass не должен ничего делать. Так

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

    может быть инстанцирован. В то время как плоскость старого DialogPreference не может. Очень странно, они должны быть точно такими же.

    Ниже приведен пример использования предпочтения диалога (подclassы, как вы упомянули).

     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 * true when pressing the positive button and false * 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); } } 

    Предпочтения.xml должны содержать

      

    У меня есть res / value, содержащий (хотя имя ключа также может быть явно указано выше).

     resetQuests 

    My PreferenceActivity делает фактический сброс из onPause. Обратите внимание, что onStop может быть слишком поздно, так как onStop не всегда вызывается сразу после нажатия:

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

    Или, что то же самое, поскольку мы все еще находимся в PreferenceActivity:

     @Override protected 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 } } 

    Первый:

    Создайте свой собственный class, который расширяет DialogPreference как DialogPreference ниже:

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

    Во-вторых:

    Измените файл xml следующим образом:

        

    Тогда ладно.

    Interesting Posts

    Разница между java HH: mm и hh: mm на SimpleDateFormat

    Имеет ли размер буфера жесткого диска?

    Доступ к веб-сайту через общедоступный IP-адрес веб-серверов с ПК в пределах одной локальной сети

    Как удалить все COM-порты из командной строки в Windows 7?

    net :: ERR_INCOMPLETE_CHUNKED_ENCODING только в Chrome

    Почему мой jQuery: not () не работает в CSS?

    Модули C ++ – почему они были удалены из C ++ 0x? Вернутся ли они позже?

    Есть ли несколько программ для настольных компьютеров для Vista? (Аналогично тому, что включено в GNOME и KDE)

    Поиск значения max / min в массиве примитивов с использованием Java

    Последовательные / подвижные суммы в векторе в R

    Удалить hiberfil.sys в Windows 7

    Устанавливаются ли пользовательские ярлыки для Windows только для определенных каталогов?

    Что такое __pycache__?

    Могу ли я получить доступ к архивам Microsoft Outlook PST с помощью любых других инструментов?

    Будет ли crashplan удаленной работы резервного копирования, если crashplan выходит из бизнеса?

    Давайте будем гением компьютера.