避免重新加载回来在片段中按下

问题描述:

我正在做一个汽车寻找的应用程序。我在gridview中显示结果,并且在右侧还有一个滑动菜单(用于搜索过滤器)。我已经使用该帮助的整个应用程序fragments.In的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.If回来的时候我用的活动然后我可以使用onBackPressed()来备份和重装避免,但在片段中,当我按下应用程序的后退按钮,它重新加载SearchDetatilFragment,这是非常讨厌..请帮助我..提前感谢。

+0

您是否有兴趣http://developer.android.com/reference/android /app/Fragment.html#onSaveInstanceState(android.os.Bundle) –

使用getFragmentManager()。popBackStack()按回来的片段,这将加载前一个片段,而不是创建一个新的片段。

对于您的应用程序备份按钮设置一个监听器是这样的:

View.OnClickListener mBackListener = new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     getFragmentManager().popBackStack(); 

    } 
}; 

我已经在这个问题上绊倒了约3个月。最后,我的努力得到了回报并找到了解决办法。

问题是,当用户“替换”时,这相当于“删除并添加”。 所以当按下后退按钮时,片段被完全删除并重新创建。我们不得不隐藏父代片段并显示子代。

当检索算法片段称为

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

当调用产品详细片段

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

好运

+0

非常感谢。好答案。工作像一个魅力 – Saraschandraa

+0

为我工作设置添加替代。谢谢 – jlopez

+0

我有一个函数静态不能使用beginTransaction – delive