Search code examples
androidandroid-fragmentsandroid-preferencesnavigation-drawer

Android: Preference Fragment with a Navigation Drawer's Fragment


Hi I have an Android app that already uses a Navigation Drawer. My MainActivity extends Fragment Activity and my SettingFragment extends PreferenceFragment

Settings Fragment:

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);
    }
}

and my 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();

How can I commit or go to the SettingsFragment()?


Solution

  • This Worked for me. Just keep in mind that this code will work with api leval 11 and higher.

    In Activity use this code to add Fragment.

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

    And Your PreferenceFragment class will be look like this.

    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() 
      {
    
      }
    }