在片段中获得Nullpointerexception

时间:2014-11-11 11:26:26

标签: android android-fragments

我在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;
}

2 个答案:

答案 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()。)