【问题标题】:Android replace fragment with existing versionAndroid用现有版本替换片段
【发布时间】:2016-01-07 02:01:27
【问题描述】:

谁能解释为什么这段代码不起作用?

    Fragment f = fragmentManager.findFragmentByTag(tag);

    if (f == null) {
        fragmentManager.beginTransaction().replace(R.id.protokoll_content, fragment, tag).commit();
    } else {
        fragmentManager.beginTransaction().replace(R.id.protokoll_content, f).commit();
    }

我认为您不需要更多来获得我想要做的事情,而且我认为其余代码与问题无关。我有 99% 的把握这是麻烦地带。

我只是试图通过标签调用来加载片段的现有版本。

在我看来,上面的代码会执行如下:

IF(片段没有现有实例){创建一个具有唯一标签的新片段并用它替换容器中现有的片段}

OTHERWISE(片段确实有一个现有实例){加载现有版本而不是创建新版本,并用找到的现有片段替换当前片段}

编辑

略微更新的代码。同样的问题,生成了新的片段,而不是加载片段的现有实例。

澄清

每次都会生成新的片段,而不是加载现有的片段。如果我写了一些东西,请转到一个新片段,然后尝试返回旧片段,所有文本都被擦除,因为新片段是生成的,而不是旧片段被加载。

【问题讨论】:

  • 你调试过tag的值吗??
  • 您的if 条件表示如果片段为空,您正在加载null fragment。你到底在做什么。 ? fragmentManager.beginTransaction().replace(R.id.activity_content, fragment, tag).commit();
  • Bharat - 谢谢,愚蠢的错误......没有睡眠和编码不计算......原来的问题仍然存在,新的片段不会加载现有实例

标签: java android android-fragments fragment


【解决方案1】:

以下代码用于在布局中没有添加片段时添加片段

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment1 fragment1 = new Fragment1();
fragmentTransaction.add(R.id.fragment, fragment1, "fragment1");
fragmentTransaction.commit();

以上代码会将 Fragment1 添加到 R.id.fragment

以下代码用于在布局中用另一个片段替换片段

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment2 fragment2 = new Fragment2();
fragmentTransaction.replace(R.id.fragment, fragment2, "fragment2");
fragmentTransaction.commit();

以上代码将在布局中将一个片段替换为另一个片段

【讨论】:

  • 谢谢,但不幸的是问题不是我不能创建/添加/替换片段,而是我不想要旧片段的新实例,我想加载以前的实例。因此,当我编辑片段中的文本,然后加载另一个片段,然后尝试返回旧片段时,所有文本都会被擦除,因为它是一个正在加载的新片段。
  • 在替换之前将编辑的文本存储在 sharedpreference 中。当您重新加载上一个片段时,从 sharepref 中获取 vales 并存储回来。这是一种将片段恢复到以前外观的方法
  • Ljas Ahamed - 但是当添加到后退堆栈时,您只需按下后退按钮,所有文本仍然存在,因此存在无需使用存储文本和重新创建片段选项即可将其取回的功能。 :P
猜你喜欢
  • 1970-01-01
  • 2012-04-21
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多