【问题标题】:How to remove fragment the replaced fragment in fragment transition?如何在片段转换中删除片段被替换的片段?
【发布时间】:2015-05-13 08:19:19
【问题描述】:

我制作了一个NavigationDrawer 片段,其中包含HomeSettingsFeedback 等项目。单击主页时的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


【解决方案1】:

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

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

【讨论】:

  • 但是为了标记片段,我需要有标记,在我的情况下,我只想回到我的应用程序的主页,这不是片段
  • 此代码删除当前片段,但如果您使用 Activity 作为活动的主页,则可以使用 FragmentActivity 。
  • 这就是我无法做到的问题fragmentActivity 出于某种原因
猜你喜欢
  • 2018-09-18
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多