Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从一个活动转到PreferenceFragment?_Java_Android_Android Fragments - Fatal编程技术网

Java 如何从一个活动转到PreferenceFragment?

Java 如何从一个活动转到PreferenceFragment?,java,android,android-fragments,Java,Android,Android Fragments,从属于活动的主页导航到使用首选项片段的帐户设置页面时遇到问题 我正试图通过导航抽屉来实现这一点,当点击项目时,应该会显示设置页面。除帐户设置页面外,我的所有其他页面都是片段,并且所有页面都正常工作(设置页面除外)。我认为PreferenceFragment是从Fragment扩展而来的,所以它肯定能工作吗 MainPage.java @Override public void onNavigationDrawerItemSelected(int position) { // update

从属于
活动的主页导航到使用
首选项片段的帐户设置页面时遇到问题

我正试图通过导航抽屉来实现这一点,当点击项目时,应该会显示设置页面。除帐户设置页面外,我的所有其他页面都是
片段
,并且所有页面都正常工作(设置页面除外)。我认为
PreferenceFragment
是从
Fragment
扩展而来的,所以它肯定能工作吗

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

    }

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

    }
}
AccountSettings.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();

    }

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

    }
}
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)'
我尝试将其更改为
片段
,它可以工作,但我想使用
首选片段
,那么如何才能使其工作


当然,我只是遗漏了一些非常明显的东西?

您需要使用
getFragmentManager
作为首选片段。因为它们不扩展Fragment类的支持v4版本

您需要使用
getFragmentManager
获取PreferenceFragment。因为它们不扩展Fragment类的支持v4版本

一种选择是使用,这是针对这种情况创建的。请参见此处的示例:一个选项是使用,它是针对这种情况创建的。有关示例,请参见此处: