我正在通过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。 –