我有一个像这样的公共方法的片段(F1)
public void asd() { if (getActivity() == null) { Log.d("yes","it is null"); } }
是的,当我(从活动)调用它时,它是空的......
FragmentTransaction transaction1 = getSupportFragmentManager().beginTransaction(); F1 f1 = new F1(); transaction1.replace(R.id.upperPart, f1); transaction1.commit(); f1.asd();
这一定是我做错了什么,但我不知道那是什么。
commit调度事务,即它不会立即发生,而是在下一次主线程准备好时调度为主线程上的工作。
commit
我建议添加一个
onAttach(Activity activity)
您的方法Fragment并在其上放置一个断点,并查看相对于您对asd(). 您会看到它是在您调用asd()exit 的方法之后调用的。onAttach调用是附加到其活动的Fragment位置,从这一点开始getActivity()将返回非空值(nb 还有一个onDetach()调用)。
Fragment
asd()
onAttach
getActivity()
onDetach()