问题描述
所以我有一个奇怪的问题,我现在无法解决。
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) {
}
});
}
当打开包含片段的活动时,这完全可以正常工作。
但这是问题所在:如果我将活动保持打开状态,则将应用程序置于后台(通过单击“主页”按钮),使用其他应用程序, findViewById
一段时间后再次打开我的应用程序,我会收到NullPointerException,因为findViewById
现在返回null 。
我该如何预防?
是否从堆栈中删除了活动,从而导致异常?
我知道我可以只检查null
,但是我需要onClickListener
,即使在后台运行后返回到应用程序也是如此。
1楼
您不应在onAttach()
执行此代码,而应在onActivityCreated()
。
这是因为尚未创建“视图”。
onAttach()
在Fragment生命周期中位于onCreateView()
之上。
有关更多信息: :