我有一个 ViewPager,其中包含多个 TextView,它们具有不同的字体大小。
此外,我还获得了增加/减少字体大小的按钮,通过添加其默认大小加上一个名为 STEP 的值(该值通过 inc/dec 字体大小按钮进行更改)来计算每个 textView 的字体大小。
我的问题是,如果在应用大小更改后第一次显示 View ,它将在 onCreateView() 期间创建所需大小的 textView,但是如果 fragment 已经缓存并且 onCreateView 不再被调用,我不知道如何更新它们的 textView考虑到只有一个缓存 fragment 显示在屏幕上(我可以毫无问题地更新它),但其他 fragment 不会显示(我不知道它们是否附加到 Activity ,在这种情况下)。
换句话说,我如何检测 ViewPager 缓存了哪些 fragment 以及它们的 onCreateView 已被调用(这些是必须应用更新到其 View 的 fragment )。我在下图中用浅绿色和问号标记了它们:
最佳答案
接受的答案很好,但您不应该缓存所有项目。相反,您可以使用此方法:
mViewPager.setOffscreenPageLimit(int);
例如,有很多带有图像和动画的项目。如果您缓存所有这些,这可能会导致 OutOfMemoryError
。为了防止这种情况,您可以定义要缓存的页面限制。
编辑:改为HashMap<Integer, Object>
,最好使用 SparseArray<Object>
.
关于Android ViewPager : Update off-screen but cached fragments in ViewPager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23133912/