用于findViewById的片段onAttach中的NullPointerException

时间:2015-10-25 14:29:13

标签: android

所以我有一个奇怪的问题,我现在无法解决。

RoomGamesFragment

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    roomActivity = (RoomActivity) activity;

    gameTabContainerView = (LinearLayout) roomActivity.findViewById(R.id.game_tab_container); // findViewById returns null

    // NullPointerException
    gameTabContainerView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
        }
    });
}

打开包含片段的活动时,这完全正常。但问题是:如果我将活动保持打开状态,将应用程序置于后台(通过单击主页按钮),使用其他应用程序,然后在一段时间后再次打开我的应用程序,我会得到NullPointerException,因为{{1} }现在返回null。 我怎么能阻止这个?活动是否从堆栈中删除,从而导致异常?我知道我可以检查findViewById,但我需要null,即使我在后台返回应用程序时也是如此。

1 个答案:

答案 0 :(得分:4)

您不应在onAttach()中执行此代码,而应在onActivityCreated()中执行此代码。这是因为尚未创建“视图”。 onAttach()高于Fragment生命周期中的onCreateView()

了解更多信息:http://developer.android.com/guide/components/fragments.html#Creating