如果您旋转 FragmentActivity,请注意事件的顺序,因为这也可能是 NullPointerExceptions 的来源。
这没有记录:第一次创建 FragmentActivity 时,
public class MyActivity extends FragmentActivity implements
MyFragment.OnFragmentInteractionListener {
private int var1;
private int var2;
@Override
protected void onCreate(Bundle savedInstanceState) {
//before
var1 = 3;
super.onCreate(Bundle savedInstanceState)
//after
var2 = 5;
}
//Interface Methods
public int getVar1() { return var1; }
public int getVar2() { return var2; }
}
[before] 和 [after] 代码都将在附加和创建片段之前运行。因此,如果您在 Fragment 的 onCreate() 调用中获得了变量,那么您将获得两个变量。但是当您旋转设备时,Activity 会从 super 调用中的 savedInstanceState 重新创建。现在,片段被重新附加并在此调用中重新创建!这意味着,这一次侦听器接口的方法在您的 [after] 代码之前调用。因此,如果您将活动的上下文传递给片段并通过接口获取信息,如下所示: https ://developer.android.com/training/basics/fragments/communicating.html
你会得到一个 var2 的 NullPointerException 因为接口方法是在 Activity 的 onCreate() 中的 [after] 代码执行之前从片段 onCreate() onAttach() ...函数调用的!因此,请注意在超级调用之前设置 InterfaceFunctions 正在访问的信息。