我有一个像这样的公共方法的片段(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();
这一定是我做错了什么,但我不知道那是什么。
原文由 Lukap 发布,翻译遵循 CC BY-SA 4.0 许可协议
commit
安排事务,即它不会立即发生,而是在下一次主线程准备好时安排为主线程上的工作。我建议添加一个
方法到您的
Fragment
并在其上放置一个断点并查看相对于您对asd()
的调用的调用时间。您会看到它在您调用asd()
的方法退出后被调用。onAttach
调用是Fragment
附加到其活动的地方,从这一点开始getActivity()
将返回非空值(onDetach()
呼叫)。