我正在通過developer.android.com中的NavigationDrawer示例代碼工作,並試圖將其作爲我的一個應用程序的導航實現。但是,當我在主窗口中切換片段時,我遇到了一個問題,因爲示例代碼重用了相同的片段,只是切換出了一個imageview。下面是從樣本代碼:在NavigationDrawer中切換整個片段
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) {
// update the main content by replacing fragments
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();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mPlanetTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
其中PlanetFragment是一個通用的片段只有一個ImageView的和沒有功能的,它並不適用於我的應用程序。所以,相反,我嘗試並用的情況下/開關取代了的SelectItem方法的第一個塊:
public void selectItem(int position){
Fragment fragment;
switch(position){
case 1: fragment = new Fragmentscreentest(); break;
case 2: fragment = new Fragmentstatusbar(); break;
case 3: fragment = new Fragmentfullscreen(); break;
default: fragment = new Fragmentscreentest(); break;
}
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mPlanetTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
和添加了相同的空constuctor到我的片段作爲PlanetFragment具有:
public Fragmentstatus() {
// Empty constructor required for fragment subclasses
}
它不工作,每當我打開應用程序時,它只顯示應用程序圖標和操作欄中的標題,沒有內容,操作欄上沒有操作,沒有導航抽屜,沒有任何內容,然後在大約一秒後崩潰。用原始代碼工作並顯示所有內容,但只適用於一個片段。
我該如何切換NavigationDrawer中的碎片?
從logcat發佈崩潰的堆棧跟蹤。 – Akash
謝謝,已經修復了,mike.b93的答案和修復了一個無關的bug。 –