Android 该片段销毁后,Listview位置被错误恢复

Android 该片段销毁后,Listview位置被错误恢复,android,listview,android-viewpager,fragment,Android,Listview,Android Viewpager,Fragment,我使用的viewpager内部有几个片段,大部分片段由一个listview组成。我要检查其中一个。我试图用一些人建议的方法解决无休止的滚动(因为我从外部数据库加载数据): if(position==getCount()-1){ LoadMore(); } 因此,每次用户向下滚动到最后一个项目时,它都会向listview添加更多的项目。假设我刷走了,碎片就被摧毁了。然后过了一会儿我回去,现在发生了什么?片段已被销毁,因此OnCreateView()方法再次运行

我使用的viewpager内部有几个片段,大部分片段由一个listview组成。我要检查其中一个。我试图用一些人建议的方法解决无休止的滚动(因为我从外部数据库加载数据):

    if(position==getCount()-1){
        LoadMore(); 
    } 
因此,每次用户向下滚动到最后一个项目时,它都会向listview添加更多的项目。假设我刷走了,碎片就被摧毁了。然后过了一会儿我回去,现在发生了什么?片段已被销毁,因此
OnCreateView()
方法再次运行,此时listview中只加载了原始数量的项(10)。但是listview的位置不知何故在最后(10),现在我做的任何事情(再次上下滚动)
LoadMore()
函数都不会运行。
listview.getCount()
又是10,所以应该没有问题。为什么会这样?为什么上面的代码在刷回后永远不会运行


谢谢

因为列表索引为0,您不应该检查:

if(position==getCount()-1){ //check for the last item ?
    LoadMore(); 
} 

您是否使用fragmentpageradapter?我使用FragmentStatePagerAdapter检查此链接保存状态只不过是在您的案例中保存listview中的项目数。默认情况下,android在内存中只保留左一页和右一页。其他页面将被销毁,当您滑回已销毁的页面时,将调用onCreateView并重新创建片段。因此,你必须拯救国家好吧,我读过关于碎片页面雷达的文章,所以我真的必须拯救国家,你的链接对我理解拯救国家的行为有很大帮助。我以另一种方式使用片段,所以我将在另一个问题中问它。我实际上使用-3,因为我想在用户接近尾声时加载这些新的数据,而不是在用户到达尾声时加载。我将在我的问题中重写它。我想您是在适配器的getView方法中进行此检查的。那么,您可以记录它是否真的得到调用,并打印position和getCount()的值吗?是的,我正在getView中这样做。我在LoadMore()后面放了一个日志,它被调用了,因此它会重新调整它应该在listview中添加另外10个项目,因为日志告诉我getcount是20。那么你确定在加载完更多数据后调用notifyDataSetChanged()吗?哇,我放错了。。谢谢你,但我刚刚意识到拯救国家是一个更好的解决方案,我将在另一个问题中提出这个问题。