Android Viewpager保存数据和视图

Android Viewpager保存数据和视图,android,save,instantiation,android-viewpager,Android,Save,Instantiation,Android Viewpager,希望有人能帮我解决我在查看页面和保存数据方面遇到的一个小问题/困惑 问题: 当在我拥有的四个视图之间滚动时,第一个视图有两个微调器,两个显示字符串或选定项的文本视图。如果我滚动到第三页并返回到第二页,第一个视图中的数据将丢失。亨斯需要保存数据 这会在下面的两个程序中完成吗?(最好的猜测是)如果是这样,需要说明什么样的命令 代码: 额外信息: viewpager正在中使用 public Object instantiateItem(View collection, int position) {

希望有人能帮我解决我在查看页面和保存数据方面遇到的一个小问题/困惑

问题:

当在我拥有的四个视图之间滚动时,第一个视图有两个微调器,两个显示字符串或选定项的文本视图。如果我滚动到第三页并返回到第二页,第一个视图中的数据将丢失。亨斯需要保存数据

这会在下面的两个程序中完成吗?(最好的猜测是)如果是这样,需要说明什么样的命令

代码:

额外信息: viewpager正在中使用

public Object instantiateItem(View collection, int position) {
}
方法的完整列表如下所示:

@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
    ((ViewPager) arg0).removeView((View) arg2);
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0 == ((View) arg1);
}

@Override
public Parcelable saveState() {
    return null;
}

@Override
public void finishUpdate(View arg0) {
}

@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
}

@Override
public void startUpdate(View arg0) {
}

不保存这些页面的状态,您可以修改ViewPager,使其缓冲所有页面,而不是在您滚动时销毁它们并重新创建它们

例如,如果您有4页:

ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
pager.setOffscreenPageLimit(3); // the number of "off screen" pages to keep loaded each side of the current page
pager.setAdapter(new PageAdapter(context));
现在,您的页面将保持“活动”

但是要小心使用这种技术,因为它会增加内存消耗。传递给setOffscreenPageLimit()的数字是当前页面每侧要保留的页数。在这种情况下,我们总共有4个页面,因此最坏的情况是当我们处于页面集的远边缘时-我们有当前可见的页面,然后剩下的3个页面从屏幕一侧移开,因此保存在内存中。然而,如果数据集较大,则可能意味着内存中保留了7页(当前页加上两边各3页)

通常,更好的解决方案是正确处理页面状态的卸载和重新加载,并重新呈现它们


希望这有帮助

我不知道屏幕外有限制,我会看看并让你知道。感谢您的建议:)不知道我是否做错了,但当输入屏幕外限制时,它会出现-->方法setOffscreenPageLimit(int)未定义类型似乎不喜欢与viewpager链接您的viewpager的导入看起来像什么?应为import android.support.v4.view.ViewPager;viewpager导入是android.support.v4.view.viewpager,我已经重新导入了它,以备需要,并将其与版本一起导入到屏幕外页面限制。eclipse带来的快速修复方法是将cast添加到viewpager,如果您单击它,它将成为一个对象viewpager的文档:方法列在那里?arg0是一个很好的变量名!
ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
pager.setOffscreenPageLimit(3); // the number of "off screen" pages to keep loaded each side of the current page
pager.setAdapter(new PageAdapter(context));