Android Viewpager保存数据和视图

时间:2012-01-17 09:05:18

标签: android save instantiation android-viewpager

希望有人可以帮助我解决浏览器和保存数据方面的轻微问题/困惑。

问题:

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

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

CODE:

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

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

额外信息:

中正在使用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) {
}

1 个答案:

答案 0 :(得分:46)

您可以修改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个任意一侧)。

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

希望这有帮助