Java 片段替换技术

Java 片段替换技术,java,android,android-fragments,Java,Android,Android Fragments,我有三个片段,当你从TabA到TabB再到TabC滑动时,它们被绑定到标签页上,它分别使用ViewPager加载FragA、FragB和FragC(希望你理解这部分)。这个滑动标签工作得很好,但我有几个固定的按钮连接到布局的底部,当单击每个按钮时,我想加载一个新的片段来替换任何片段a,B或C。替换工作正常,但当我返回到替换的/以前的片段时,该布局上的所有UI组件都会完全消失,并且不会指示它是否已暂停、停止或销毁。代码如下: 替换以前的片段代码: if(actionBar.isSh

我有三个片段,当你从TabA到TabB再到TabC滑动时,它们被绑定到标签页上,它分别使用ViewPager加载FragA、FragB和FragC(希望你理解这部分)。这个滑动标签工作得很好,但我有几个固定的按钮连接到布局的底部,当单击每个按钮时,我想加载一个新的片段来替换任何片段a,B或C。替换工作正常,但当我返回到替换的/以前的片段时,该布局上的所有UI组件都会完全消失,并且不会指示它是否已暂停、停止或销毁。代码如下:

替换以前的片段代码:

        if(actionBar.isShowing())
                {
                    actionBar.hide();
                }
                FragmentManager fms = getSupportFragmentManager();
                FragmentTransaction fts = fms.beginTransaction();
                search s = new search();
                if(getCurrentDisplayFragment() == Type1)
                {
                    setcurrentItem(viewPager.getCurrentItem());
                    Fragment frgs = mAdapter.getItem(viewPager.getCurrentItem());
                    viewPager.removeViewAt(viewPager.getCurrentItem());
                    frgs.setUserVisibleHint(false);

                    Log.i("if say", "Not Responding");
                }

                fts.replace(R.id.hoster, s);
                            fts.addToBackStack("search");
                fts.commit();
                setCurrentDisplayFragment(s,Type2);
setCurrentDisplayFragment(s,Type2)我构建该代码是为了帮助指示要替换的片段以及要采取的措施。S是一个片段,Type2是一个字符串

因此,当按下“后退”按钮时,我想返回到先前替换的任何片段A、B或C。 代码如下:

@Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        //super.onBackPressed();
        Log.i("event in back","I have been presssed ");
        if(getCurrentDisplayFragment() == Type2)
        {
            actionBar.show();
            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            fm.popBackStack();
            ft.remove(getCurrentDisplayFragment(Type2));
            ft.commit();
            viewPager.setCurrentItem(getcurrentItem());
            actionBar.setSelectedNavigationItem(getcurrentItem());
            Fragment frags = mAdapter.getItem(viewPager.getCurrentItem());
            frags.setUserVisibleHint(true);
            setCurrentDisplayFragment(frags, Type1);
        }
        else
        {

        }

    }

虽然没有显示一些变量名和方法声明,但您应该了解我在做什么,因为所有声明都已完成。只是更换和保留他们的用户界面状态给了我一个问题。

你为什么把这件事弄得这么复杂?如果要替换视图寻呼机中的任何片段,只需替换视图寻呼机即可。如果有一个片段用选项卡固定住视图寻呼机,并且当按下底部按钮时,您只需用新片段替换固定住视图寻呼机的片段,这会容易得多。这样,当按下后退按钮时,您无需执行任何操作。

hoster是封装viewpager的片段的id。