【问题标题】:re-add any fragment container for multiple times多次重新添加任何片段容器
【发布时间】:2015-02-09 15:14:57
【问题描述】:

我在某天之前问过一个问题,即:Using fragment more than one time with new values with backstack maintain

我的问题已经找到了..但是旧片段正在刷新(正在加载)..这不是必需的(因为它包含分页)。我知道刷新旧片段的原因是我使用过 goToFragmentWithBackStack 方法中的 FragmentTransaction.replace。如果我在 goToFragmentWithBackStack 方法中使用 FragmentTransaction.add,它将不再起作用,并且新数据将在旧片段中更新。

类似这样的东西:A(旧数据)->B->A(新数据)[如我所愿..预期结果] 但显示我是否在 goToFragmentWithBackStack 方法中使用了 FragmentTransaction.replace:A(加载/刷新的旧数据)->B->A(加载/刷新的新数据)

如果我在 goToFragmentWithBackStack 方法中使用 FragmentTransaction.add:A(old data)->B->nothing...

如果我在按下后退按钮时检查 backstack,它会显示如下内容:

如果我在 goToFragmentWithBackStack 方法中使用 FragmentTransaction.replace:A(加载/刷新的旧数据)

如果我在 goToFragmentWithBackStack 方法中使用 FragmentTransaction.add:A(有新数据和旧片段)

结论:我的主要问题是我想在 Back Pressed 时停止刷新旧片段 A 中的数据。在 goToFragmentWithBackStack 方法中使用 FragmentTransaction.add,它不起作用...

这是我的代码:

public static void goToFragmentWithBackStack(Fragment fragment) {
    Fragment tmp = fm.findFragmentByTag(fragment.getClass().getName());
    if (tmp != null && tmp.isVisible())
        return;

    ft = fm.beginTransaction();

    ft.replace(R.id.content_frame, fragment, fragment.getClass().getName());
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.addToBackStack(null);
    ft.commit();
    currentTag = fragment.getClass().getName();
}

调用片段:

  LeftAndRightActivity.goToFragmentWithBackStack(new ExploreFragment(theWord,"#"));

ExploreFragment:

public ExploreFragment(String data,String pattern) {
this.str_data = data;   
this.str_pattern = pattern;
}

现在应用程序的流程类似于我从 ExploreFragment(1) 到 PostDetailFragment 然后再用新数据 ExploreFragment(2) ..(工作正常)

现在,当我按设备的返回按钮返回时,旧的 ExploreFragment(1) 再次加载...我不想刷新 ExploreFragment(1) 的数据,它应该只是恢复而不是刷新.. .我希望你能理解我的问题..

请帮助我..提前谢谢..

【问题讨论】:

  • 添加 FragmentTranscation.replace 函数的一些代码......理想情况下,我将在创建时将数据作为参数传递给新片段,您可以使用 getArgument() 方法在片段中检索它
  • 你好,我已经添加了与链接中相同的代码..
  • 我认为你没有明白我的意思..我已经使用“替换”方法成功添加了所有这些功能..我只想多次“添加”同一个片段而不是“替换”
  • 是的..您可以使用“替换”方法在不同的实例中添加相同的片段 n 次
  • 粘贴你正在使用的代码

标签: android android-fragments fragment back-stack


【解决方案1】:

在您的 goToFragmentWithBackStack() 方法中,您使用类名作为标记。因此,即使您创建了一个新实例,FragmentA 也应该始终具有相同的标签。所以给 Fragment 一个唯一的标签并检查值是否保留。

您删除 if() 条件并始终创建一个新的片段实例

public static void goToFragmentWithBackStack(Fragment fragment) {            
    ft = fm.beginTransaction();

    ft.add(R.id.content_frame, fragment, fragment.getClass().getName());
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.addToBackStack(null);
    ft.commit();
    currentTag = fragment.getClass().getName();
}

我没有尝试过这段代码,所以检查一下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-24
    • 2012-12-11
    • 2012-08-20
    • 2015-12-05
    • 1970-01-01
    • 2016-10-07
    • 2021-01-18
    相关资源
    最近更新 更多