2015-09-30 24 views
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(); 


    } 

我的应用程序是用drawer.The 8星球drawernavigation演示demo.When你点击抽屉ListView显示一个项目,在这个星球上的画面片段的变化。在commit()之后调用onCreate()吗?

这里是我的困惑:

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

但实际上,他们在onItemClick()完成后调用。为什么? 在此先感谢。

+0

*为什么?*在UI /主线程上的消息队列的基础... – Selvin

回答

1

如果你读了提交方法,它说的文件:

时间表提交本次交易的。提交不会立即发生;它将被安排在主线程上工作,在下次线程准备就绪时完成。

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

+0

非常感谢.. – thirtvanke

0

是的。提交只会开始/计划提交片段的过程。

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

相关问题