在webview片段之间切换

时间:2014-08-05 14:47:10

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

我在导航栏中列出了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();
}

1 个答案:

答案 0 :(得分:0)

嗯,你必须分两步完成:

1 /首先,在这种情况下,FragmentTransaction的替换方法不是您所需要的。你必须切换到

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);

OR

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();