我有片段XYZFragment,其中我显示列表视图。在Listview项目上单击我替换像这样的片段。
Fragment fragment=new XYZFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft= fragmentManager.beginTransaction();
ft.addToBackStack(null);
ft.replace(R.id.content_frame, fragment).commit();
但我的问题是,当我点击后退按钮时,片段会重新加载listview。当我以前使用Activity时,它永远不会发生。 所以我的问题是如何保存以前片段的实例,以防止重新加载数据。
答案 0 :(得分:2)
如果没有看到您的代码,我们无法帮助您,但从您的问题我可以找出问题,此解决方案可能会帮助您。
创建堆栈
private static Stack<Fragment> myFragStack;
myFragStack = new Stack<Fragment>();
//加载片段
public void loadFragment(Fragment fragment){
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
myFragStack.lastElement().onPause();
ft.hide(myFragStack.lastElement());
myFragStack.push(fragment);
}
// onBackPressed
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
if (myFragStack.size() > 1) {
ft.remove(myFragStack.pop());
myFragStack.lastElement().onResume();
ft.show(myFragStack.lastElement());
ft.commit();
}
}
它是一个示例代码..您可以根据您的要求进行更改。 ft.replace()将完全删除视图&amp;将丢失上下文,因此您无法维护列表状态,但使用使用hide-show维护片段的堆栈将解决您的问题。