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?
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 –