gpt4 book ai didi

android - 如何在 fragment 转换中删除 fragment 被替换的 fragment ?

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:16 27 4
gpt4 key购买 nike

我制作了一个 NavigationDrawer fragment ,其中包含 HomeSettingsFeedback 等项目。 home 项在点击 home 时应该打开,home 是在应用程序启动时打开的初始页面。

打开我正在使用的项目的页面 onclick 的过程是我用这段代码用其他 fragment 替换 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,当你调用 activity 时,它会突然关闭抽屉,这与使用我用于所有其他项目的替换过程顺利关闭抽屉不同,当它返回时感觉就像该应用程序已重新启动。

所以我想知道有没有办法回到初始页面或者取消 fragment 过渡替换布局?

更新代码

 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);
}
});

SOLVED

经过一整天的研究,我找到了这个问题的解决方案。我将其张贴在这里,以防有人在寻找它

这是我做的

        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);
}
});

我在这里尝试的概念是,我将所有 fragment 放入后台堆栈,当单击 home 项目时,我正在清除完整的后台堆栈

最佳答案

把这段代码放在返回或主页按钮上你也可以把它放到@override 方法 onBackPressed() 中。希望这对你有帮助:)

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
<CurrentFragmane> fragment = (<CurrentFragmane>) getFragmentManager()
.findFragmentByTag("<CurrentFragmane>");
fragmentTransaction.remove(fragment);
fragmentTransaction.commit();
getFragmentManager().popBackStack();

关于android - 如何在 fragment 转换中删除 fragment 被替换的 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30209353/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com