2013-02-25 16 views
5

enter image description herenon possono ottenere il PreferenceFragment di lavorare (Compilazione errore)

sto ottenendo l'errore quando provo a compilare il mio progetto: "Il metodo add (int, frammento) nel tipo FragmentTransaction non è applicabile per la argomenti (int, FragmentPreferences) ". Per quanto ne so, il PreferenceFragment è un frammento? Sto sviluppando per Android 4.0 ma devo usare la libreria di android-support-v4 perché il mio progetto include anche ViewPager. Ho trovato questo esempio a http://developer.android.com/guide/topics/ui/settings.html#Fragment:

// Display the fragment as the main content. 
     getFragmentManager().beginTransaction() 
       .replace(android.R.id.content, new SettingsFragment()) 
       .commit(); 

ma non riesco a farlo funzionare.

Il mio codice:

case R.id.menu_settings: 
    FragmentPreferences prefs = new FragmentPreferences(); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.add(android.R.id.content, prefs); 
    ft.commit(); 
    break; 

FragmentPreferences:

public class FragmentPreferences extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 

} 

risposta

16

Ecco perché PreferenceFragment estende android.app.Fragment, anziché android.support.v4.app.Fragment che lo android.support.v4.app.FragmentTransaction si aspetta.

Per ora, non esiste un backport ufficiale dello PreferenceFragment nella libreria di supporto. Tuttavia, è possibile utilizzare librerie come UnifiedPreferences per colmare questa lacuna.

1

Controllare i import istruzioni nella parte superiore del vostro codice. Probabilmente una delle classi che state usando è da support mentre l'altra no.

+1

Se cambio una di quelle classi, si romperà il mio viewpager. – user1888162

+0

Come ianhanniballake suggerito sopra, dovrai cercare alternative. Mi piacerebbe solo ricorrere ad un 'PreferenceActivity' nel frattempo se non hai davvero bisogno di frammenti. –

0

Ecco il backport non ufficiale di PreferenceFragment nella libreria di supporto. Ultimo aggiornamento è stato febbraio 2015 & è compatibile con i dispositivi lecca-lecca. android-support-v4-preferencefragment

import android.support.v4.preference.PreferenceFragment; 
+0

dal mio punto di vista, pessima soluzione! – Mateus

+0

cura di spiegare perché è una cattiva soluzione? –

+0

La soluzione che ho cercato per molto tempo. –

-1

Solo un rapido aggiornamento: ora ci sono preferenze a sostegno Librray:

compile "com.android.support:preference-v7:$supportVersion" 

divertirsi.

Problemi correlati