避免在片段背面重新加载

use*_*oid 11 android gridview android-fragments slidingmenu

我正在为汽车查找制作一个应用程序.我在gridview中显示结果,并在右侧有一个滑动菜单(用于搜索过滤器).我已经在片段的帮助下制作了这个整个应用程序.在gridview中我有一个负载在底部更多的页脚,当我点击第12个位置gridview时,我开始像这样的另一个片段:

SearchDetailActivity.goToFragment(ProductDetailFragment.newInstance(map,position));
Run Code Online (Sandbox Code Playgroud)

在ProductDetailFragment中我有一个后退按钮,回到之前的片段,如下所示:

SearchDetailActivity.goToFragment(SearchDetailFragment.newInstance(str_url));
Run Code Online (Sandbox Code Playgroud)

现在当我再次回来时,数据显示从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();
}
Run Code Online (Sandbox Code Playgroud)

我想从ProductDetailFragment回来时避免数据重新加载.如果我使用了Activity然后我可以使用onBackPressed()来回复并避免重新加载但是当我按下应用程序的后退按钮时它会在Fragment中重新加载SearchDetatilFragment,这非常烦人.请发布帮帮我......谢谢.

Dur*_*han 33

我在这个问题上偶然发现了大约3个月.最后,我付出了努力并找到了解决方案.

问题是,当您用户"替换"时,这相当于"删除并添加".因此,当按下后退按钮时,片段将被完全删除并重新创建.相反,我们必须隐藏父片段并显示孩子.

调用serach片段的地方

 ft = fm.beginTransaction();
 ft.replace(R.id.main_fragment, yourSearchFragment, "searchFragment");
 ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
 ft.commit();
Run Code Online (Sandbox Code Playgroud)

调用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();
Run Code Online (Sandbox Code Playgroud)

祝好运