0
  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();


    }

我的应用程序是一个带抽屉的演示。八个行星抽屉导航演示。当您单击ListView抽屉上显示的项目时,片段上的行星图片会发生变化。

这是我的困惑:

我认为 will 的onCreateandonCreateView方法Fragment称为“ fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();”的子序列。

但实际上,他们onItemClick()打完电话。为什么?提前致谢。

4

2 回答 2

1

如果您阅读了 commit 方法的文档,它会说:

安排此事务的提交。提交不会立即发生;它将被安排在主线程上的工作,以便在该线程下一次准备好时完成。

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

于 2015-09-30T11:22:16.583 回答
0

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

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

于 2015-09-30T11:32:49.303 回答