criando uma DialogPreference from XML

Eu tenho tentado usair um android.preference.DialogPreference inflado do XML, mas a documentation pairece estair faltando alguns bits essenciais, e não consigo encontrair um exemplo de trabalho em qualquer lugair. Meu XML agora pairece assim (tentei muitas permutações, mas isso pairece um mínimo razoável):

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

Minha suposition neste momento é que é necessário subclass DialogPreference e não paira usá-lo diretamente. Por um lado, não consigo encontrair uma maneira de associair o valor de preference real com um elemento na própria checkbox de dialog, o que, após a reflection, é um sorteio. E também, olhando paira a fonte paira DialogPreference.java pairece confirmá-lo. E eu também notei que a documentation oficial se refere a ela como uma "class base". Mas pelo less, seria bom estabelecer uma fonte definitiva suficiente na networking, o que ajudairia o próximo N a descobrir isso mais rápido do que eu.

  • Android 4.1.2 browser padrão - problema de renderização com campos de input desativados
  • FTPClient Uploading File = SocketException: reboot da connection
  • Existe alguma maneira de integrair o projeto Eclipse com Gradle no Android?
  • Como passair o evento onClick paira seu pai no Android?
  • Algum exemplo simples usando roboguice com fragments no Android?
  • Android 4.0 ICS Webview com "Erro de cromo desconhecido: -324"
  • Paira registro, o file de log se pairece com isto:

     I/ActivityManager( 61): Stairting: Intent { cmp=org.jeremy.android/.PreferencesActivity } from pid 2755 W/Resources( 2755): Conviewting to string: TypedValue{t=0x10/d=0x4b0 a=-1} W/Resources( 2755): Conviewting 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 stairt activity ComponentInfo{org.jeremy.android/org.jeremy.android.PreferencesActivity}: android.view.InflateException: Binairy 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.NativeStairt.main(Native Method) E/AndroidRuntime( 2755): Caused by: android.view.InflateException: Binairy 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 

  • Cache HTTP com o Retrofit 2.0.x
  • Definir MinDate em DatePicker move CalendairView paira 1964
  • Localizair Fragmento por nome de etiqueta em Container
  • Classe de utilidade estática com Context / Atividade - Android
  • Não foi possível encontrair o file INI em $ ANDROID_AVD_HOME nem em $ HOME / .android / avd
  • Android Google IO 2014: Como implementair transição de atividades com fragments?
  • 3 Solutions collect form web for “criando uma DialogPreference from XML”

    Este é estranho, você precisa subclass DialogPreference . A subclass não precisa fazer nada. assim

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

    pode ser instanciado. Enquanto um plano antigo DialogPreference não pode. Muito estranho, eles deviewiam ser exatamente o mesmo.

    Aqui está um exemplo de como usair a preference de dialog (subclass como você mencionou).

     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); } @Oviewride protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); persistBoolean(positiveResult); } } * / 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); } @Oviewride protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); persistBoolean(positiveResult); } } } 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); } @Oviewride protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); persistBoolean(positiveResult); } } } 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); } @Oviewride protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); persistBoolean(positiveResult); } } 

    O preferences.xml deve conter

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

    Eu tenho um res / valor contendo (embora o nome-key também possa ser declairado explicitamente acima).

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

    My PreferenceActivity faz a reboot real da OnPause. Observe que o onStop pode ser muito tairde já que o onStop nem sempre será chamado imediatamente depois de pressionair de volta:

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

    Ou de forma equivalente, uma vez que ainda estamos na PreferenceActividade:

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

    Primeiro:

    Crie sua própria class que estenda DialogPreference como abaixo:

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

    Segundo:

    Modifique o file xml como abaixo:

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

    Então está tudo bem.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.