2016-03-22 15 views
0

Ich habe Probleme beim Navigieren von meiner Hauptseite, die eine Activity ist, auf die Seite Kontoeinstellungen, die PreferenceFragment verwendet.Wie gehe ich von einer Aktivität zu PreferenceFragment?

Ich versuche dies über die Navigationsleiste zu erreichen, wenn auf das Element geklickt wird, sollte die Einstellungsseite angezeigt werden. Alle meine anderen Seiten sind Fragment mit Ausnahme der Kontoeinstellungen Seite und alle funktionieren ordnungsgemäß (mit Ausnahme der Einstellungsseite). Ich dachte PreferenceFragment erstreckt sich von Fragment so sicher sollte es funktionieren?

MainPage.java

@Override 
public void onNavigationDrawerItemSelected(int position) { 
    // update the main content by replacing fragments 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    if (position == 0) { 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, PlaceholderFragment.newInstance(1)) 
       .commit(); 

    } else if (position == 1) { 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, Search.newInstance(2)) 
       .commit(); 

    } 

    else if (position == 2) { 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, Favourites.newInstance(3)) 
       .commit(); 
    } 

    else if (position == 3) { 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, History.newInstance(4)) 
       .commit(); 

    } 

    else if (position == 4) { 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, AccountSettings.newInstance(5)) 
       .commit(); 

    } 

} 

AccountSettings.java

public class AccountSettings extends PreferenceFragment { 

    Activity mActivity; 

    private static final String ARG_SECTION_NUMBER = "section_number"; 

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

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); //inflating layout 
     addPreferencesFromResource(R.xml.settings); 
     setHasOptionsMenu(true); 
     restoreActionBar(); 

    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     mActivity = activity; 

    } 

    public void restoreActionBar() { 
     ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
     actionBar.setDisplayShowTitleEnabled(true); 
     actionBar.setTitle("Account Settings"); 
    } 

    public AccountSettings() { 

    } 
} 

Es mir folgende Fehler geben würde, auf MainPage.java:

'replace(int, android.support.v4.app.Fragment)' in 'android.support.v4.app.FragmentTransaction' cannot be applied to '(int, com.example.laptop.whatsfordinner.AccountSettings)' 

Ich habe versucht, es zu einem Fragment zu ändern, und es funktioniert, aber ich möchte PreferenceFragment verwenden, also wie kann ich es zur Arbeit bekommen?

Sicherlich fehlt mir gerade etwas wirklich offensichtlich?

+0

Eine Option wäre [PreferenceFragmentCompat] (http://developer.android.com/reference/android/support/v7/preference/PreferenceFragmentCompat.html), die für diese genaue Situation erstellt wurde. Hier ein Beispiel: http://StackOverflow.com/Questions/32487206/inner-preferenceScreen-not-open-with-preferencefragmentcompat –

Antwort

0

Sie müssen getFragmentManager für PreferenceFragment verwenden. Weil sie die Version v4 der Fragment-Klasse nicht erweitern.

Verwandte Themen