我正在制作一个汽车查找应用程序.我在gridview中显示结果,并在右侧有一个滑动菜单(用于搜索过滤器).我已经在片段的帮助下制作了这个整个应用程序.在gridview中我有一个负载底部更多的页脚,当我点击第12个位置gridview时,我正在启动另一个像这样的片段:
SearchDetailActivity.goToFragment(ProductDetailFragment.newInstance(map,position));
在ProductDetailFragment中我有一个后退按钮,可以返回上一个片段,如下所示:
SearchDetailActivity.goToFragment(SearchDetailFragment.newInstance(str_url));
现在当我再次回来时,数据显示从0-10项.
在goToFragment()中我写了这段代码:
public static void goToFragment(Fragment fragment) { Log.d("GoToFrag","sjdk>>"+fragment); Fragment tmp = fm.findFragmentByTag(fragment.getClass().getName()); if (tmp != null && tmp.isVisible()) return; ft = fm.beginTransaction(); ft.replace(R.id.main_fragment,fragment,fragment.getClass().getName()); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.commit(); currentTag = fragment.getClass().getName(); }
我想从ProductDetailFragment回来时避免重新加载数据.如果我使用了Activity,那么我可以使用onBackPressed()来回复并避免重新加载但是当我按下应用程序的后退按钮时会在Fragment中重新加载SearchDetatilFragment,这非常烦人.请发布帮帮我……谢谢.
解决方法
我在这个问题上偶然发现了大约3个月.最后,我付出了努力并找到了解决方案.
问题是,当您使用“替换”时,这相当于“删除并添加”.
因此,当按下后退按钮时,片段将被完全删除并重新创建.
相反,我们必须隐藏父片段并显示孩子.
调用serach片段的地方
ft = fm.beginTransaction(); ft.replace(R.id.main_fragment,yourSearchFragment,"searchFragment"); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.commit();
调用productDetails片段时
ft = fm.beginTransaction(); ft.hide(getFragmentManager().findFragmentByTag("searchFragment")); ft.add(R.id.main_fragment,yourDetailfragment); ft.addToBackStack(null); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.commit();
祝好运