OnCreateView NullPointerException

时间:2015-06-10 13:17:31

标签: android android-fragments nullpointerexception

我在Google Play商店中有一个应用程序。我通过Crashlytics / Fabric收到崩溃通知,因此我没有真正的LogCat可供参考。另外,我无法弄清楚如何在我自己的系统上复制这个bug。

我从Crashlytics获得的错误如下:

  

com.company.appname.Fragment.onCreateView(Fragment.java:48)

这里是班级宣言的相关细节:

import android.support.v4.app.Fragment;
public class MyTypeFragment extends Fragment {...

这里是片段中该部分的代码:

44 mRestartButton = (Button)contentView.findViewById(R.id.restart_button);
45 mRestartButton.setTypeface(regularTf);
46 mRestartButton.setOnClickListener(new View.OnClickListener() {
47     @Override
48     public void onClick(View v) {
49         getFragmentManager().popBackStack("startingFragment", 0);
50     }
51 });

我觉得有趣的是,崩溃报告将崩溃列为onCreateView()方法,但第48行是我按钮上的onClick()方法的声明{{1 }}。

我已经查看了以下问题:

在访问此片段的XML时,它们似乎都表明问题与不正确的onClickListener有关。但是,我不认为这是一个问题,因为这是这个片段的XML部分(并且这个片段只有一个布局):

id

有一件事可能会引起关注:我对我的许多片段使用了相同的范例。该应用程序的功能是深入研究一系列问题以获得答案。 &#34;重置&#34;按钮允许他们一直回到开头而不经过他们沿途看到的任何中间片段。每个片段都有一个按钮,以<LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" > <Button android:id="@+id/restart_button" android:layout_gravity="right" android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingBottom="8dp" android:paddingTop="8dp" android:text="Restart" /> 命名。正如我所说的那样,我试图在我的问题上复制这个问题并且无法弄清楚它是如何发生的。

我已经阅读了一些内容,表明这个问题可能与片段某种程度上脱离其活动有关,但我甚至试图离开我的应用并返回,但仍无法复制这个错误。

1 个答案:

答案 0 :(得分:0)

我认为代码适用于许多设备,并且该错误不易重现。我唯一的推荐是我自己的编码技术是将发布的代码移到onViewCreated()方法而不是onCreateView()。原因是有时 onCreateView无法及时完成处理GUI布局。至少,这很容易尝试。祝你用不同的设备进行测试。

示例代码:

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

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
   Context thisContext = view.getContext();

   mRestartButton = (Button) view.findViewById(R.id.restart_button);
   mRestartButton.setTypeface(regularTf);
   mRestartButton.setOnClickListener(new View.OnClickListener() {
   ...

注意:

  • onCreateView()更改为仅返回根视图以传递到onViewCreated()
  • onViewCreated()现在正在进行用户界面工作。