在片段中按下后列表视图重新加载

时间:2014-05-05 11:41:29

标签: android android-fragments android-listview fragmentmanager

我有片段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时,它永远不会发生。 所以我的问题是如何保存以前片段的实例,以防止重新加载数据。

1 个答案:

答案 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维护片段的堆栈将解决您的问题。