Android 碎片生命周期

3

我有一个带有3个导航选项卡(Fragment 1、Fragment 2和Fragment 3)的操作栏。现在,我想在选中Fragment 3时执行一个任务,所以我将我的任务代码放在onCreateView()方法中。然而,我发现Fragment 3没有执行这个任务,也就是说onCreateView()方法没有被调用。(我通过日志检查了这一点)。另一个奇怪的事情是: - 当我滑动时:从F2到F3,任务不起作用。 - 当我滑动时:从F1到F2再到F3,任务起作用。(onCreateView() 方法被调用) 我不知道为什么从F1滑动到F3时会调用F3的onCreateView()方法? 有什么想法吗?

3个回答

5

tyczj的意见是正确的,但并没有提供解决问题的方法。

在您的F3中,只需覆盖setUserVisibleHint(boolean),当boolean为true时,意味着F3现在在ViewPager内可见。 请注意,您可以依赖此方法,因为您正在使用ViewPager,并且在显示片段时它会正确设置用户可见提示。

当您未使用ViewPager时,除非您明确知道片段可见,否则不能依赖此方法。

编辑: setUserVisibleHint()不是由ViewPager调用的,而是由FragmentPagerAdapter调用的。


系统会先调用 setUserVisibleHint() 方法还是 onCreateView() 方法?如果我知道这个,我就能把我的代码放到正确的方法中了。 - Hoang Lam
如果您正在使用ViewPager,那么onCreateView()将首先被调用,当片段被创建时。就像tyczj所说的,即使片段不可见,也可以创建一个片段,以确保平滑滚动。然后,当一个片段被滚动进来时,setUserVisibleHint()将被调用。这个方法是由ViewPager调用的,而不是直接由系统调用的。 - pdegand59
1
只是一个提示,setUserVisibleHint()实际上是由FragmentPagerAdapter调用的。http://grepcode.com/file/repo1.maven.org/maven2/com.google.android/support-v4/r7/android/support/v4/app/FragmentPagerAdapter.java?av=f#128 - pdegand59

1
由于 ViewPager 在您想要滚动到下一个片段时会加载下一个视图,因此默认情况下 ViewPager 会加载 ViewPager 中的上一个当前和下一个片段,因此当您从 F1 滚动到 F2 时,F3 将被加载,以便在转到 F3 时具有平滑的滚动。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接