添加PreferenceFragment时,Fragment Manager会编译错误

时间:2017-05-24 13:44:08

标签: java android android-fragments preferencefragment

我有一个Activity,我将所有片段放入其中。我现在想要添加PreferenceFragment而不是普通片段。我正在使用片段管理器的不支持版本。

在编译期间,我收到此错误:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{app_identifier/app_identifier.ActMain}: java.lang.NullPointerException: Attempt to write to field 'android.app.FragmentManagerImpl android.app.Fragment.mFragmentManager' on a null object reference

我正在通过导航抽屉选择片段,所以我有一个switch语句来选择片段。以下是它的外观,切入重要部分:

private void displaySelectedScreen(int id) {
        android.app.Fragment fragment = null;
        PreferenceFragment preferenceFragment = null;

        int fragment_type;

        switch (id) {
            case R.id.nav_compare: {
                fragment = new Fragment_Compare();
                fragment_type = 0;
                break;
            }
            case R.id.nav_settings: {
                preferenceFragment = new Fragment_Settings();
                fragment_type = 1;
                break;
            }
            default: {
                fragment = new Fragment_Compare();
                fragment_type = 0;
                break;
            }
        }

        android.app.FragmentManager fragmentManager = getFragmentManager();
        switch (fragment_type) {
            case 0: {
                fragmentManager.beginTransaction().replace(R.id.content_act_compare, fragment).commit();
            }
            case 1: {
                fragmentManager.beginTransaction().replace(R.id.content_act_compare, preferenceFragment).commit();
            }
        }
    }

编译器在case 1崩溃。

普通的Fragment Classes扩展了普通的android.app.Fragment类,而Settings类扩展了android.preference.PreferenceFragment

我尝试过使用支持v4库,但我首先不需要它,它也没有用。我猜我必须以不同方式调用交易,但我无法找到方法。

非常感谢任何帮助。

编辑:我的Fragment_Settings类的代码:

import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment_Settings extends PreferenceFragment {
    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        addPreferencesFromResource(R.xml.preferences);
        getActivity().setTitle(R.string.nav_item_settings);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_settings_layout, container, false);
    }
}

0 个答案:

没有答案