所以我有一个奇怪的问题,我现在无法解决。
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,因为
findViewById
返回现在为空。我该如何预防?是否从堆栈中删除了活动,从而导致异常?我知道我可以只检查
null
,但是即使在后台运行后返回应用程序,我也需要onClickListener
。 最佳答案
您不应在onAttach()
中执行此代码,而应在onActivityCreated()
中执行。这是因为尚未创建“视图”。在片段生命周期中,onAttach()
高于onCreateView()
。
有关更多信息:http://developer.android.com/guide/components/fragments.html#Creating