5

Sto sviluppando un'applicazione in cui ho utilizzato i frammenti della libreria di supporto e mi sono imbattuto in questo problema in cui non riesco a aggiungere un PreferencesFragment (per le impostazioni) utilizzando questa libreria?Preference Frammento con libreria di supporto

ho trovato alcuni suggerimenti per utilizzare v7 PreferenceFragmentCompat, tuttavia sembra che per qualche motivo non posso aggiungere la libreria v7 sostegno al mio percorso di generazione, quindi non riesco a trovare il PreferenceFragmentCompat ...

I Ho provato a riscrivere il codice per usare frammenti regolari invece di quelli nella libreria di supporto, ma ho avuto alcuni problemi con quello

Nel caso ve lo stiate chiedendo, sto sviluppando con la libreria di supporto perché, mentre sto leggendo The Big Libro di Nerd Ranch su programmazione Android, da qualche parte all'inizio consigliano sempre di usare la libreria di supporto per i frammenti.

Qualche suggerimento sulle soluzioni alternative o dovrei semplicemente provare a passare alla versione non di supporto?

Qui ci sono le dipendenze dal mio build.gradle:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:design:23.1.1' 
} 
+0

perché non è possibile aggiungere libreria di supporto al percorso di generazione ? – Pooya

+0

Stai utilizzando Android Studio o Eclipse? Se stai usando Android Studio mostra le dipendenze build.gradle .... –

+1

ecco le mie dipendenze di gradle dependencies { compile fileTree (include: ['* .jar'], dir: 'libs') testCompile 'junit: junit : 4.12' compilazione 'com.android.support:appcompat-v7:23.1.1' compilazione 'com.android.support:design:23.1.1' } @DanielNugent – Stefan

risposta

15

La biblioteca v7 appcompat lo utilizza la libreria di supporto v4, quindi è necessario importare esplicitamente i componenti di libreria di supporto v7 che avete bisogno.

Nel tuo caso, basta aggiungere al vostro compile 'com.android.support:preference-v7:23.1.1' build.gradle:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:design:23.1.1' 
    compile 'com.android.support:preference-v7:23.1.1' 
} 

allora questo lavoro:

import android.os.Bundle; 
import android.support.v7.preference.PreferenceFragmentCompat; 
import android.view.View; 

public class MyPreferenceFragment extends PreferenceFragmentCompat { 

    public MyPreferenceFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreatePreferences(Bundle bundle, String s) { 
     addPreferencesFromResource(R.xml.fragment_settings_pref); 
    } 
} 
+1

Grazie Daniel, ho avuto un problema in lo stesso gradle, non stavo prestando attenzione pensando che l'aggiunta delle dipendenze nella struttura del progetto configurasse automaticamente il file gradle. – Stefan

+1

Lei, signore, mi ha salvato la giornata. – Mauker

+0

È necessario inserire 'addPreferencesFromResource' in [onCreatePreferences] (https://developer.android.com/reference/android/support/v7/preference/PreferenceFragmentCompat.html#onCreatePreferences (android.os.Bundle,% 20java.lang.String)): "Chiamato durante' onCreate (Bundle) 'per fornire le preferenze per questo frammento Le sottoclassi dovrebbero chiamare' setPreferenceScreen (PreferenceScreen) 'direttamente o tramite metodi helper come' addPreferencesFromResource (int) '." – matoni