8

Ciao, ho un'app Android che utilizza già un Cassetto di navigazione. mio MainActivity estende Frammento attività e la mia SettingFragment estende PreferenceFragmentAndroid: Frammento di preferenza con frammento di un cassetto di navigazione

Impostazioni Frammento:

public class SettingsFragment extends PreferenceFragment { 
    public SettingsFragment() {} 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.prefs); 
    } 
} 

e la mia MainActivity:

PreferenceFragment preferenceFragment = new SettingsFragment(); 
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.add(android.R.id.content, preferenceFragment); // I'm getting an error here should be Fragment not PreferenceFragment 
ft.commit(); 

Come posso commettere o andare al SettingsFragmen t()?

risposta

2

questo ha funzionato per me. Ricorda che questo codice funzionerà con api 11 e versioni successive.

In Attività utilizzare questo codice per aggiungere frammenti.

android.app.Fragment infoFragment = new InfoFragment(); 
FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.add(android.R.id.content, infoFragment); 
ft.commit(); 

E la classe PreferenceFragment sarà simile a questa.

public class InfoFragment extends PreferenceFragment 
{ 
/** 
    * The fragment argument representing the section number for this 
    * fragment. 
*/ 
private static final String ARG_SECTION_NUMBER = "section_number"; 

/** 
    * Returns a new instance of this fragment for the given section 
    * number. 
    */ 

    public static android.app.Fragment newInstance(int sectionNumber) 
    { 
    InfoFragment fragment = new InfoFragment(); 
    Bundle args = new Bundle(); 
    args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
    fragment.setArguments(args); 
    return fragment; 
    } 

    public InfoFragment() 
    { 

    } 
} 
+0

ho semi stesso problema e faccio la tua risposta, ma purtroppo non succede nulla. per favore mi rispondi? http: //stackoverflow.com/q/41290692/4568864 –

0

ne dite di questo:

Fragment preferenceFragment = new SettingsFragment(); 
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.add(android.R.id.content, preferenceFragment); 
ft.commit(); 
+0

.i hanno semi stesso problema e faccio la risposta, ma purtroppo non succede nulla. La prego di rispondere a me? http: //stackoverflow.com/q/41290692/4568864 –

12

avvolgere le PreferenceFragment corrente con un semplice frammento che non notando ma apre prefenceFragment come segue

public class SettingsActivity extends Fragment { 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    getActivity().getFragmentManager().beginTransaction() 
      .replace(android.R.id.content, new MyPreferenceFragment()) 
      .commit(); 
    } 
    private class SettingsFragment extends PreferenceFragment { 
     public SettingsFragment() {} 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.prefs); 
     }  
    } 
} 
+0

ho lo stesso problema con me e faccio la tua risposta, ma sfortunatamente non succede nulla. vorresti rispondermi? http: //stackoverflow.com/q/41290692/4568864 –