Intereting Posts
Как избежать отображения перекрытия в относительной компоновке в android? Сделать вывод ящика навигации за панель состояния Попытайтесь повторно открыть уже закрытый объект: java.lang.IllegalStateException :? Элементы галереи, перекрывающиеся (сбрасываются) Как определить, способно ли устройство звонить и отправлять сообщения Остановить EditText от получения фокуса при запуске Activity Не удалось открыть DDMS в Android Studio. Появляется загадочная ошибка Eclipse ActivityOptions.makeSceneTransitionAnimation не существует Android weird lib.c crash Почему в списке последних приложений Android отображаются черные или прозрачные снимки экрана? Android обнаруживает событие блокировки телефона В каком блоге разработки Android есть самые пошаговые руководства и учебные пособия? AddView не работает Можно ли настроить собственный шрифт для всего приложения? Как программно забыть беспроводную сеть в android?

Создание диалогового окна диалога XML

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

 <DialogPreference android:key="funThing" android:title="Fun Thing" android:dialogLayout="@layout/fun_layout" android:positiveButtonText="OK" android:negativeButtonText="Cancel" /> 

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

Solutions Collecting From Web of "Создание диалогового окна диалога XML"

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

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

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

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

 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); } } 

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

 <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"/> 

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

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

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

Первый:

Создайте свой собственный класс, который расширяет 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 следующим образом:

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

Тогда ладно.