Android Viewpager保存数据和视图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Viewpager保存数据和视图相关的知识,希望对你有一定的参考价值。

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

问题:

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

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

码:

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

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

EXTRA INFO:正在使用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个任意一侧)。

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

希望这可以帮助

以上是关于Android Viewpager保存数据和视图的主要内容,如果未能解决你的问题,请参考以下文章

Android安卓viewpager和Fragment的结合,多个Fragment视图之间切换等运用

android,viewpager 怎么设置当前默认页

Android viewpager......如何获取视图?

Android viewpager,控制哪些视图重新渲染

Android ViewPager组件

Android MVVM框架搭建RecyclerVIew + ViewPager2 + BaseQuickAdapter