我有一个带有3个导航标签的操作栏:片段1,片段2和片段3.现在,我想在选择片段3时执行任务,因此我将任务代码放在onCreateView()方法中。但是,我发现Fragment 3没有完成任务,这意味着没有调用onCreateView()方法。 (我通过记录来检查)。其他奇怪的事情是: - 当我滑动时:F2-> F3:任务不起作用。 - 当我滑动时:F1-> F2-> F3:任务工作。 (调用onCreateView()方法) 我不知道为什么当我从F1滑到F3时F3的onCreateView()方法被调用了? 有什么想法?
答案 0 :(得分:5)
来自tyczj的评论是正确的,但它没有解决问题。
在F3中,只需覆盖setUserVisibleHint(boolean),当布尔值为true时,表示F3现在在ViewPager
内可见。
请注意,您可以依赖此方法,因为您正在使用ViewPager,并且在显示片段时正确设置用户可见提示。
当您不使用ViewPager时,除非在知道片段可见时明确调用该方法,否则不能依赖此方法。
编辑:setUserVisibleHint()
不是由ViewPager调用,而是由FragmentPagerAdapter调用。
答案 1 :(得分:1)
因为ViewPager
会加载下一个视图,以便在您想要滚动到下一个片段时准备就绪。默认情况下,viewpager会加载ViewPager中的上一个当前片段和下一个片段,因此当您从F1滚动到F2时,将加载F3,以便在转到F3时进行平滑滚动
答案 2 :(得分:0)
之前的答案告诉你为什么你所做的事情不会奏效。但要纠正它,您需要创建一个AsyncTaskLoader并使用片段LoaderManager来加载和管理任务。见http://developer.android.com/guide/components/loaders.html