【问题标题】:List view reload when back pressed in fragment在片段中按回时列表视图重新加载
【发布时间】:2014-05-05 11:41:29
【问题描述】:

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

【问题讨论】:

  • 然后在片段的 onResume() 处重新加载您的 listView
  • 贴出你为后退按钮编写的代码
  • 试试这个 ft.add(R.id.content_frame,fragment).commit();
  • 嗨,Imarn,如果我添加片段,那么在可见片段中也会单击上一个片段列表。
  • 当您单击列表视图项目时,除了更改片段之外究竟会发生什么??

标签: android android-fragments android-listview fragmentmanager


【解决方案1】:

没有看到您的代码,我们无法帮助您,但从您的问题中我可以找出问题所在,此解决方案可能会帮助您。

创建这样的堆栈

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 2013-08-11
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多