片段替换技术

时间:2014-01-09 09:36:38

标签: java android android-fragments

当你从TabA滑动到TabB到TabC时,我有三个绑定到Tabs的片段,它分别使用ViewPager加载FragA,FragB和FragC(希望你理解这一部分)。这个滑动Tabs工作正常,但我有几个固定按钮附加到布局的底部,当点击每个按钮时,我想加载一个新的片段来替换任何片段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
        {

        }

    }

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

1 个答案:

答案 0 :(得分:0)

为什么这么复杂?如果要替换视图寻呼机中的任何片段,则只需替换视图寻呼机。如果你有一个片段拿着带有标签的视图寻呼机,当按下底部按钮时,你只需要用新片段替换持有视图寻呼机的片段,这将会容易得多。这样,当按下后退按钮时,您将不需要做任何事情。