【发布时间】:2013-08-11 00:33:28
【问题描述】:
在我的应用程序中,我有标签栏功能。在一个选项卡中,我在 lisview 中显示服务器数据,单击该列表项的详细信息页面将在新片段中打开。
但是当我从该详细信息页面按下后退按钮时,每次 oncreateview 调用上一页,所以每次创建 listview 并 new 获取新的服务器数据。那么如何防止这种情况在按下后退按钮时只显示以前的状态呢?
【问题讨论】:
标签: android fragment back-button
在我的应用程序中,我有标签栏功能。在一个选项卡中,我在 lisview 中显示服务器数据,单击该列表项的详细信息页面将在新片段中打开。
但是当我从该详细信息页面按下后退按钮时,每次 oncreateview 调用上一页,所以每次创建 listview 并 new 获取新的服务器数据。那么如何防止这种情况在按下后退按钮时只显示以前的状态呢?
【问题讨论】:
标签: android fragment back-button
我知道给出这个答案已经太久了,但我猜你正在用另一个片段替换你的片段。我的意思是说你正在使用
ft.replace(R.id.realTabContent, fragment);
要移动到您在 onItemClick 中使用的其他片段,所以使用简单的解决方案
ft.add(R.id.realTabContent, fragment);
而不是替换您的片段。
了解 replace 和 add 之间的区别。这将解决您的问题。
替换:它将替换原始片段并在您返回时重新创建视图
添加:它只会添加一个新片段到堆栈。
希望这对面临同样问题的人有所帮助...
【讨论】:
Add,那么新片段会覆盖旧片段
android:background="@color/white" 以使其不透明。
我不认为阻止调用 onCreateView 是一个好主意,如果函数没有被调用,就会有异常,所以不,你不应该。我建议您将“创建的列表视图和新的获取新服务器数据”移动到另一个可以显式调用的地方(当你想要的时候,你想要的地方,onCreate() 是一个好地方),而不是这样做,不要放它在onCreateView()。希望这会有所帮助。
【讨论】:
您应该将数据对象与视图变量分开缓存,因为如果您从服务器获取任何数据并且不想再次调用,则需要更新它们的引用,然后使用分支来分支出该代码。
创建一个 init() 方法,您可以在其中执行所有初始化和服务器调用,并在您不想调用 init() 时从逻辑上将调用分支到 init() 方法。
【讨论】: