2015-09-30 65 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,請注意所有回調計劃/發佈在主線程上。

相關問題