【问题标题】:Switching between webview fragments在 webview 片段之间切换
【发布时间】:2014-08-05 14:47:09
【问题描述】:

我在导航抽屉中列出了 3 个片段,所有这些片段都包含一个 webview。通过单击导航抽屉中的项目,我想在片段之间切换,但同时也保存它们的状态。给定的代码是导航抽屉的侦听器方法。在实例化新的片段之前,如何检查片段是否存在任何现有实例?

private void selectItem(int position) {
    Fragment newFragment = new Fragment_1();
    android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
    switch(position) {
        case 0:
            newFragment = new Fragment_1();
            break;
        case 1:
            newFragment = new Fragment_2();
            break;
        case 2:

            break;
    }
    android.support.v4.app.FragmentTransaction t = getSupportFragmentManager().beginTransaction();
    t.replace(R.id.content_frame, newFragment);
    t.addToBackStack(null);
    t.commit();
}

【问题讨论】:

    标签: android android-fragments webview android-webview navigation-drawer


    【解决方案1】:

    好吧,你必须分两步完成:

    1/ 首先,FragmentTransaction 的 replace 方法在这种情况下不是你需要的。您将不得不切换到

    t.add(R.id.content_frame, newFragment, TAG)
    

    TAG 是片段的标签(字符串)。在您的示例中,您正在处理 2 个片段,因此您应该定义:

    private final String TAG_FRAGMENT1 = "fragment1";
    private final String TAG_FRAGMENT2 = "fragment2";
    

    根据您要添加的片段,您可以调用:

    t.add(R.id.content_frame, newFragment, TAG_FRAGMENT1);
    

    t.add(R.id.content_frame, newFragment, TAG_FRAGMENT2);
    

    后跟:

    t.commit();
    

    2/ 现在您将拥有带有 TAG 的片段,您将能够在片段回溯中找到 framgnent1 的现有实例:

    getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT1);
    

    这将返回 fragment1 的实例(如果存在或“null”),在这种情况下,您必须创建一个新实例并使用 fragmentTransaction“添加”它(我在 1/ 中解释过)

    3/ 如果 findFragmentByTag 返回一个片段(而不是 null),那么您应该使用 replace 方法:

    FragmentManager fm = getSupportFragmentManager();
    Fragment f = fm.findFragmentByTag(TAG_FRAGMENT1);
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.content_frame, f);
    ft.commit();
    

    【讨论】:

    • 非常感谢您的及时回复!一个仍然挥之不去的疑问是如何再次添加 fragment1 的现有实例,即上述函数返回“NOT null”时的代码?
    • 我编辑了。 (我不得不承认我没有使用 Android Studio 的计算机,所以我无法对其进行测试,但我相当确定它可以工作)
    • 完美运行!再一次感谢你! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多