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();
}
我的应用程序是一个带抽屉的演示。八个行星drawernavigation演示。当你点击抽屉上的ListView
节目的项目时,片段上的行星图片会发生变化。
这是我的困惑:
我认为onCreate
的{{1}}和onCreateView
方法会将子序列称为“Fragment
”。
但实际上,他们在fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
完成后打来电话。为什么?
提前谢谢。
答案 0 :(得分:1)
如果您阅读了提交方法的文档,则说:
计划此交易的提交。提交不会立即发生;它将被安排为主线程上的工作,以便在下一次线程就绪时完成。
由于selectItem也在主线程上,因此提交不会发生,直到selectItem返回之后(但不一定在!之后)。
答案 1 :(得分:0)
是。 Commit只会开始/安排提交片段的过程。
这是生命周期中的一个好diagram,请注意所有回调都是在主线程上安排/发布的。