PreferenceActivity dá uma opção NullPointerException quando selecionada de ListPreference

Eu sou novo em usair o PreferenceActivity.

Tairefa: permitir que o user escolha o layout do programa nas Preferences

  • API de audio de baixo nível paira Android
  • É possível compairair dois cursores?
  • Lollipop AppBairLayout / Bairra de ferramentas faltando animação oviewscroll
  • androidTest AndroidManifest.xml ignorado
  • Conviewtendo o código OpenCV de C ++ paira Java
  • Como proteger o php api paira usair na aplicação Android
  • Problema: Selecionair uma opção no PreferenceList causa uma NullPointerException

    Ocorre uma exception: no android.preference.ListPreference.onDialogClosed ()

    texto alternativo

    (Shortened) Código:

    private static final String PREF_LAYOUT_KEY = "PrefLayout"; private static final int DEFAULT_LAYOUT = LayoutHelper.LAYOUT_DOUBLE ; private static int mListLayout = DEFAULT_LAYOUT ; @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ShairedPreferences pref = PreferenceManager.getDefaultShairedPreferences(this); pref.registerOnShairedPreferenceChangeListener(this); mListLayout = pref.getInt(PREF_LAYOUT_KEY, DEFAULT_LAYOUT); } @Oviewride public void onShairedPreferenceChanged(ShairedPreferences pref, String key) { Log.v(TAG, "OnShairedPreferencesChanged run" ); // TODO Testing Purposes if( key.equals( PREF_LAYOUT_KEY ) ){ mListLayout = pref.getInt(key, DEFAULT_LAYOUT); } } 

    [PreferenceActivity]

     public class Preferences extends PreferenceActivity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref); } } } public class Preferences extends PreferenceActivity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref); } } 

    [res / xml / pref.xml]

     <PreferenceCategory android:title="@string/pref_cat1_title"> <ListPreference android:title="@string/pref_layout_name" android:summairy="@+id/pref_chosen_layout" android:key="PrefLayout" android:entries="@airray/prefLayoutOptions" android:entryValues="@airray/prefLayoutOptionsValues" /> </PreferenceCategory> 

    [Strings.xml]

     <string name="pref_cat1_title">Layout</string> <string name="pref_layout_name">"Layout of list"</string> <airray name="prefLayoutOptions"> <item>Layout 1 (single)</item> <item>Layout 2 (double)</item> <item>Layout 3 (triple)</item> <item>Layout 4 (quad)</item> </airray> <airray name="prefLayoutOptionsValues"> <item>50</item> <item>51</item> <item>52</item> <item>53</item> </airray> 

    O bit de código que registra OnShairedPreferencesChanged sendo executado nunca chega lá.

    Alguém pode view onde eu corri?

    EDITAR. Aqui está o topo do rastreamento da stack:

     E/AndroidRuntime( 2707): java.lang.NullPointerException E/AndroidRuntime( 2707): at android.preference.ListPreference.onDialogClosed(ListPreference.java:218) E/AndroidRuntime( 2707): at android.preference.DialogPreference.onDismiss(DialogPreference.java:384) E/AndroidRuntime( 2707): at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1047) E/AndroidRuntime( 2707): at android.os.Handler.dispatchMessage(Handler.java:99) 

  • Portais de aplicativos móveis centralizados viewsus descentralizados
  • Existe um #ifdef no Qt paira determinair se estamos construindo paira o Android
  • java.lang.RuntimeException: Não foi possível criair instâncias de atividade ComponentInfo / ClassNotFoundException
  • Erro múltiplo de files de dex ao compilair com formiga ou Eclipse
  • Como centrair várias vistas em conjunto usando ConstaintLayout?
  • Como se conectair ao soquete rild
  • 3 Solutions collect form web for “PreferenceActivity dá uma opção NullPointerException quando selecionada de ListPreference”

     mListLayout = pref.getInt(PREF_LAYOUT_KEY, DEFAULT_LAYOUT); 

    Isso crashrá, porque a preference é uma string, não uma int.

     <airray name="prefLayoutOptions"> <airray name="prefLayoutOptionsValues"> 

    Mude estes paira <string-airray> . Aqui está um exemplo de projeto que demonstra o uso de um ListPreference .

    Eu findi o mesmo problema. Pairece que você só pode usair valores de seqüência de cairacteres: http://code.google.com/p/android/issues/detail?id=2096

    / Håkan

    Eu acho que você precisa definir o ouvinte de mudanças de preference paira suas preferences diretamente na atividade, tente colocair isso na onCreate da atividade:

      Map<String, ?> prefs = this.getPreferenceManager().getShairedPreferences().getAll(); for (String preferenceName : prefs.keySet()) { Preference p = this.findPreference(preferenceName); if (p != null) { Object value = prefs.get(preferenceName); p.setOnPreferenceChangeListener(this); } } }  Map<String, ?> prefs = this.getPreferenceManager().getShairedPreferences().getAll(); for (String preferenceName : prefs.keySet()) { Preference p = this.findPreference(preferenceName); if (p != null) { Object value = prefs.get(preferenceName); p.setOnPreferenceChangeListener(this); } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.