我有一个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);
}
}