【问题标题】:Fragment Replacement Techniques片段替换技术
【发布时间】:2014-01-09 18:11:36
【问题描述】:

当您从 TabA 滑动到 TabB 再到 TabC 时,我有三个绑定到 Tabs 的片段,它分别使用 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是Fragment,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 状态,这给了我一个问题。

【问题讨论】:

    标签: java android android-fragments


    【解决方案1】:

    你为什么要把这件事弄得这么复杂?如果要替换视图分页器中的任何片段,则只需替换视图分页器。如果您有一个片段来保存带有选项卡的视图寻呼机,并且当按下底部按钮时,您只需将持有视图寻呼机的片段替换为新片段。这样,当按下返回按钮时,您无需执行任何操作。

    【讨论】:

    • hoster 是封装 viewpager 的片段的 id。
    猜你喜欢
    • 1970-01-01
    • 2014-12-10
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多