在commit()之后调用onCreate()吗?

时间:2015-09-30 11:16:52

标签: android android-fragments fragment-lifecycle

  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();完成后打来电话。为什么? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您阅读了提交方法的文档,则说:

  

计划此交易的提交。提交不会立即发生;它将被安排为主线程上的工作,以便在下一次线程就绪时完成。

由于selectItem也在主线程上,因此提交不会发生,直到selectItem返回之后(但不一定在!之后)。

答案 1 :(得分:0)

是。 Commit只会开始/安排提交片段的过程。

这是生命周期中的一个好diagram,请注意所有回调都是在主线程上安排/发布的。