onCreate() 是否在 commit() 之后调用?
Does onCreate() called after commit()?
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
private void selectItem(int position) {
Fragment fragment = new PlanetFragment();
Bundle args = new Bundle();
args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
fragment.setArguments(args);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
mDrawerList.setItemChecked(position, true);
setTitle(mPlanetTitles[position]);
mDrawerTitle=mPlanetTitles[position];
mDrawerLayout.closeDrawers();
}
我的应用程序是一个带有 drawer.The 八个行星抽屉导航的演示 demo.When 你点击抽屉上 ListView
显示的一个项目,片段上的行星图片会改变。
这是我的困惑:
我认为 Fragment
的 onCreate
和 onCreateView
方法将调用“fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
”的子序列。
但实际上,他们是在onItemClick()
完成后才打电话来的。为什么?
提前致谢。
如果您阅读提交方法的文档,它会说:
Schedules a commit of this transaction. The commit does not happen immediately; it will be scheduled as work on the main thread to be done the next time that thread is ready.
由于 selectItem 也在主线程上,提交将在 selectItem returns 之后发生(但不一定在之后!)。
是的。 Commit 只会 begin/schedule 提交片段的过程。
这里有一个很好的生命周期diagram,注意所有的回调都scheduled/posted在主线程
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
private void selectItem(int position) {
Fragment fragment = new PlanetFragment();
Bundle args = new Bundle();
args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
fragment.setArguments(args);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
mDrawerList.setItemChecked(position, true);
setTitle(mPlanetTitles[position]);
mDrawerTitle=mPlanetTitles[position];
mDrawerLayout.closeDrawers();
}
我的应用程序是一个带有 drawer.The 八个行星抽屉导航的演示 demo.When 你点击抽屉上 ListView
显示的一个项目,片段上的行星图片会改变。
这是我的困惑:
我认为 Fragment
的 onCreate
和 onCreateView
方法将调用“fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
”的子序列。
但实际上,他们是在onItemClick()
完成后才打电话来的。为什么?
提前致谢。
如果您阅读提交方法的文档,它会说:
Schedules a commit of this transaction. The commit does not happen immediately; it will be scheduled as work on the main thread to be done the next time that thread is ready.
由于 selectItem 也在主线程上,提交将在 selectItem returns 之后发生(但不一定在之后!)。
是的。 Commit 只会 begin/schedule 提交片段的过程。
这里有一个很好的生命周期diagram,注意所有的回调都scheduled/posted在主线程