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

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

09-10 07:07