android - 为什么每当我翻阅我的应用程序 viewPager 时,我的 fragment onCreate 都会被广泛调用?

标签 android android-fragments android-viewpager android-fragmentactivity

我不太了解这个 fragment 生命周期业务。

我有一个非常标准的 3 页水平 slider View 寻呼机布局,用于我的应用程序的“查看详细信息”部分。我在三个页面的中间页面启动我的应用程序。我的 FragmentActivity 将页面设置为第 1 页。

mPager.setCurrentItem(1); //default to center page, current data view fragment

我一直在使用 FragmentStatePagerAdapter,因为使用 FragmentPagerAdapter 有时会使我的应用程序崩溃,例如,当从暂停状态返回时,这是目前解决该问题的最快方法。似乎有效,但我怀疑状态方面可能是我这里的问题的原因。

所以一开始我以为我会让每个 fragment 完成从休息服务获取数据然后将其显示在列表中的工作,但我不再那么确定了。

我尝试运行一个独特的异步任务来获取每个 fragment onCreateView 事件中的数据。 然后在阅读了更多关于 fragment 生命周期的信息后,我切换到 onCreate,注意到 onCreateView 被调用得非常频繁,这反过来又导致贪婪的应用程序经常通过网络请求数据。

切换到 onCreate 并没有改变任何东西。对于 2 个相邻的 fragment ,OnCreate 仍然像 onCreateView 一样被调用。

奇怪的是,我设置为第一个显示在 Fragment Activity 中的 fragment 只调用了一次 onCreate。

这里感觉有些不对。

现在我在想我应该让父 fragment Activity 声明并调用所有异步任务来获取我需要在 fragment 中显示的数据。 在父 fragment Activity 拥有的对象中设置异步调用的结果,然后让 fragment 使用父包含的对象创建 ListView 等。

但是,如果在调用每个 fragment onCreateView 之前由父 Activity 启动的异步任务没有完成并且父 Activity 包含的对象还没有准备好怎么办......

签名,困惑和沮丧

最佳答案

ViewPager 非常热衷于关闭它当前未使用的东西,而这正是这里发生的事情。 ViewPager 的默认行为是在正在查看的页面的任一侧“保留”一个页面,并销毁其余页面。因此,在您的3页 View 中,选择第1页时,第3页被销毁,然后重新自定义第2页,请重新创建第3页。正如您所注意到的,第 2 页只调用了一次 onCreate(..),因为它总是与当前选定的页面相邻,或者就是当前选定的页面。

要解决这个问题,只需设置 ViewPager.setOffscreenPageLimit(2)。然后 ViewPager 将保留您所有的 fragment 。显然这对于​​大量 fragment 来说不是一个好主意,但对于您的情况应该没问题。

关于android - 为什么每当我翻阅我的应用程序 viewPager 时,我的 fragment onCreate 都会被广泛调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11852604/

相关文章:

java - fragment 和底部NavigationView

android - 设置 ConstraintLayout 组的 alpha 值

android - 如何用 ActivityResultLauncher 替换 startActivityForResult 但仍然包含选项 Bundle?

java - 评级栏不变

Android如何在 fragment 中显示DatePicker?

android - SlidingMenu 和 ViewPager 导致 Recursive Entry

android - ViewPager 页面 curl

android - 带工具栏和 TabLayout 的 ViewPager 高度错误

android - 当我尝试提供接口(interface) Domain Mapper<PlayerData Entity, List<PlayerModel>> 的实现时出错

java - Android条码(按下“后退”按钮时崩溃)