有一天我问了一个问题,即: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)的数据它应该只是恢复不刷新..我希望你能理解我的问题..
请帮帮我..谢谢提前..
答案 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();
}
我没有试过这段代码所以请检查一下。