多次重新添加任何片段容器

时间:2014-12-11 07:48:20

标签: android android-fragments fragment back-stack

有一天我问了一个问题,即: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(旧数据) - > B->没有......

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

如果我在 goToFragmentWithBackStack 方法中使用 FragmentTransaction.replace :A(带加载/刷新的旧数据)< -B< -A(带加载/刷新的新数据) )(我想停止刷新老片)

如果我在 goToFragmentWithBackStack 方法中使用 FragmentTransaction.add :A(包含新数据和旧片段)< -B< -A(空白无) (由于旧片段A已经在容器中,因此新数据设置在旧片段中)

CONCLUTION :我的主要问题是我想停止刷新旧片段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)的数据它应该只是恢复不刷新..我希望你能理解我的问题..

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

1 个答案:

答案 0 :(得分:0)

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

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