【发布时间】:2015-05-13 08:19:19
【问题描述】:
我制作了一个NavigationDrawer 片段,其中包含Home、Settings、Feedback 等项目。单击主页时的home 项目应打开,其中主页是应用启动时打开的初始页面。
点击我正在使用的项目打开页面的过程是我用这段代码将layout替换为其他片段
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.relative, fragment).commit();
menuList.setItemChecked(position, true);
menuList.setSelection(position);
getActivity().setTitle(ittems[position]);
一切正常,期待一个,当我尝试点击 home 按钮时,我如何进入初始/起始页面?
我所做的是单击home 项目,我正在初始化intent 并启动activity,但我不喜欢它,因为它是activity,当您调用活动时它会关闭抽屉突然,与使用我用于所有其他项目的替换过程顺利关闭抽屉不同,当它返回时感觉就像应用程序已重新启动。
所以我想知道有没有办法回到初始页面或取消片段过渡替换布局?
已更新代码
menuList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Fragment fragment = null;
switch (position) {
case 0:Intent intent = new Intent(getActivity(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
getActivity().overridePendingTransition(0, 0);
startActivity(intent);
break;
case 1:
Bundle overview = new Bundle();
overview.putInt("overview", finalPage);
overview.putInt("month", tm+1);
overview.putInt("year", ty);
fragment = new OverviewFragment();
fragment.setArguments(overview);
break;
case 2:
fragment = new StatisticsFragment();
break;
case 3:
fragment= new SomeFragment();
break;
case 4:
fragment = new SettingsFragment();
break;
case 5:fragment= new FeedbackFragment();
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.relative, fragment).commit();
menuList.setItemChecked(position, true);
menuList.setSelection(position);
getActivity().setTitle(ittems[position]);
}
mDrawerLayout.closeDrawer(Gravity.START);
}
});
已解决
经过一天辛苦的研究,我找到了解决这个问题的办法。我把它贴在这里,以防有人在寻找它
这就是我所做的
menuList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Fragment fragment = null;
FragmentTransaction fragmentManager = getFragmentManager().beginTransaction();
FragmentManager fragmentManager1= getFragmentManager();
switch (position) {
case 0:
while (fragmentManager1.getBackStackEntryCount()!=0){
fragmentManager1.popBackStackImmediate();
}
break;
case 1:
Bundle overview = new Bundle();
overview.putInt("overview", finalPage);
overview.putInt("month", tm+1);
overview.putInt("year", ty);
fragment = new OverviewFragment();
fragment.setArguments(overview);
break;
case 2:
fragment = new StatisticsFragment();
break;
case 3:
fragment= new SomeFragment();
break;
case 4:
fragment = new SettingsFragment();
break;
case 5:fragment= new FeedbackFragment();
break;
}
if (fragment != null) {
fragmentManager.addToBackStack("back");
fragmentManager
.replace(R.id.relative, fragment).commit();
menuList.setItemChecked(position, true);
menuList.setSelection(position);
getActivity().setTitle(ittems[position]);
}
mDrawerLayout.closeDrawer(Gravity.START);
}
});
我在这里尝试的概念是我将所有片段放入后台堆栈,当单击 home 项目时,我正在清除完整的后台堆栈
【问题讨论】:
-
请发布您的完整导航抽屉代码。
-
再次调用相同的代码片段,带有主页片段实例,在主页项上单击
-
@AbhishekDabral 它将第一次返回片段为
null,因为没有调用onClick事件 -
@Meenaxi 目前我不在,肯定会尽快更新
-
你家的物品是碎片吗?
标签: android android-fragments navigation-drawer