我正在研究来自developer.android.com的NavigationDrawer示例代码并试图将其实现为我的某个应用程序的导航。但是,当在主窗口中切换片段时,我遇到了一个问题,因为示例代码重用了相同的片段并且只是切换出一个imageview。以下是示例中的代码:
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但没有功能的通用片段,不适用于我的应用。所以,相反,我尝试用case / switch替换了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);
}
并将相同的空构造器添加到我的片段中,因为PlanetFragment具有:
public Fragmentstatus() {
// Empty constructor required for fragment subclasses
}
它不起作用,每当我打开应用程序时,它只显示应用程序图标和操作栏中的标题,没有内容,操作栏上没有操作,没有导航抽屉,什么也没有,然后它在关于一个后崩溃第二。使用原始代码,它可以工作并显示所有内容,但这仅适用于一个片段。
如何在NavigationDrawer中实际切换片段?
答案 0 :(得分:7)
看看我的代码:
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) {
switch (position) {
case 0:
fragmentManager.beginTransaction()
.replace(R.id.content_frame, new MainActivityFragment())
.commit();
break;
case 1:
fragmentManager.beginTransaction()
.replace(R.id.content_frame, new DbListViewFragment())
.commit();
break;
case 2:
fragmentManager.beginTransaction()
.replace(R.id.content_frame, new StatisticsFragment())
.commit();
break;
case 3:
fragmentManager.beginTransaction()
.replace(R.id.content_frame, new CalculatorFragment(), "calculator")
.commit();
break;
}
我正在使用一个开关盒。位置0是抽屉里ListView中的第一个项目。
取自我对这个问题的回答:DrawerLayout on click disabled after first event
编辑:
如果你想在开始时选择一个片段,你可以在你的onCreate方法结束时这样做:
if (savedInstanceState == null) {
selectItem(0);
}
0是您所需片段的位置