在我的应用程序中,我有tabbar功能。在一个选项卡中,我在lisview中显示服务器数据,点击该列表项的详细信息页面将以新的片段打开。
但是当我按下该详细页面上的后退按钮时,每次oncreateview都会调用上一页,因此每次创建listview时都会获取新的服务器数据。那么如何防止这种情况,只是在后退按钮时显示以前的状态?
答案 0 :(得分:37)
我知道给出这个答案已经太久了,但我猜的是你正在用其他的替换你的片段。我的意思是说你正在使用
ft.replace(R.id.realTabContent, fragment);
移动到你在onItemClick中使用的其他片段,这么简单的解决方案是使用
ft.add(R.id.realTabContent, fragment);
而不是替换你的片段。
了解替换与添加之间的区别。这将解决您的问题。
替换:它会替换原始片段,并在您回来时重新创建视图
添加:它只会添加一个新片段到堆栈。
希望这能帮助那些面临同样问题的人......
答案 1 :(得分:5)
我不认为防止调用onCreateView是一个好主意,除非函数未被调用,否则会有异常,所以不,你不应该。我建议您将“创建列表视图并将新提取的新服务器数据”移动到另一个可以明确调用的地方(当您需要时,在您想要的地方,onCreate()
是一个好地方),而不是这样做。把它放在onCreateView()
中。希望这会有所帮助。
答案 2 :(得分:-1)
您应该将数据对象与视图变量区分开来,因为如果您从服务器获取任何数据并且不想再次调用然后使用分支来扩展该代码,则需要更新它们的引用。
创建一个init()方法,您可以在其中执行所有初始化和服务器调用,并在您不想调用init()时以逻辑方式分出对init()方法的调用。