3

我有片段 XYZFragment,我在其中显示列表视图。在 Listview 项目上单击我像这样替换片段。

Fragment fragment=new XYZFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft= fragmentManager.beginTransaction();
ft.addToBackStack(null);
ft.replace(R.id.content_frame, fragment).commit();

但我的问题是当我单击返回按钮时,片段会重新加载列表视图。当我使用 Activity 时,它永远不会发生。所以我的问题是如何保存前一个片段的实例,以防止重新加载数据。

4

1 回答 1

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() 将完全删除视图并丢失上下文,因此您无法维护列表状态,但是使用带有 hide-show 的堆栈维护片段将解决您的问题。

于 2014-05-06T06:48:14.087 回答