我在App上工作,我在一个活动上附加了5个片段。一切都很好,但当我从任何片段将我的应用程序放在后台时,一段时间后我的应用程序恢复它崩溃。我将我的Activty引用为null。这是我的代码
这是我在附加片段
的Activty中的代码 FragmentManager fragmentManager = getSupportFragmentManager();
searchFragment = SearchFragment.newInstance(MainBaseActivity.this);
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.frameLayoutMain, searchFragment, "SearchFragment");
fragmentTransaction.commit();
这是我的片段类
public static SearchFragment newInstance(MainBaseActivity mainBaseActivity) {
fragment = new SearchFragment();
fragment.mainBaseActivity = mainBaseActivity;
fragment.inflater = (LayoutInflater) mainBaseActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
fragment.myApplication = ((MyApplication) mainBaseActivity.getApplicationContext());
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.search_fragment, container, false);
preferences = mainBaseActivity.getSharedPreferences(Constant.CHAI_APP, Context.MODE_PRIVATE); // here i get null pointer
editor = preferences.edit();
return view;
}
答案 0 :(得分:1)
Fragment具有getActivity()
方法来检索它所附加的活动。用它代替mainBaseActivity
答案 1 :(得分:1)
系统可以在不同时间杀死和重建碎片。你不能相信你在newInstance()
中做的那种初始化 - 当重新创建片段时,字段不会被初始化。
删除这些初始化:
fragment.mainBaseActivity = mainBaseActivity;
fragment.inflater = (LayoutInflater) mainBaseActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
fragment.myApplication = ((MyApplication) mainBaseActivity.getApplicationContext());
当您需要访问托管活动或getActivity()
时,并在您的片段中使用Application
。
对于inflater,已经将一个作为参数传递给onCreateView()
。无需自己获取。
(要将params传递给片段重新创建的片段,请使用setArguments()
。)