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