【问题标题】:setUserVisibleHint() issue with FragmentStatePagerAdapterFragmentStatePagerAdapter 的 setUserVisibleHint() 问题
【发布时间】:2015-05-20 08:38:07
【问题描述】:

我知道这个问题已经在不同的网站上提出过(例如 herethere,但我很难找到针对我的特定用例的解决方案。

事情是这样的:我有 3 个标签(每个标签扩展 Fragment),它们由 ActionBarActivity(称为 Home)托管。 Home 包含一个 ViewPager,它扩展了一个 FragmentStatePagerAdapter(这是创建不同选项卡的地方)。

当我滑动到最后一个选项卡(第三个)时,我使用 setUserVisibleHint() 使用 AsyncTask<> 从服务器加载一些数据:

public class TabOperations extends Fragment {

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(isVisible())
            loadUserRequestByDate(); // Launch Asynctask<> method.
    }
}

从第一个选项卡滑动到最后一个选项卡时效果很好。但是,当我滑回之前的选项卡时(所以,第二个),setUserVisibleHint()(所以,loadUserRequestByDate())中的方法被触发。

如何避免这种行为?

【问题讨论】:

    标签: android android-fragments android-viewpager android-fragmentactivity fragmentstatepageradapter


    【解决方案1】:

    您是否尝试使用 setOffscreenPageLimit(3) 为您的 viewpager 保留片段。

    http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)

    【讨论】:

    • 如果您为 viewpager 保留 3 个 offscreenpagelimit,即使您在它们之间不断切换,所有 3 个片段也将保持活动状态。这应该避免一次又一次地调用所有片段生命周期方法。
    • 在这种情况下可能不会规定在 setUserVisibleHint() 中加载数据。您可以尝试通过 viewPageChangeListener 加载吗
    • 我明白了。刚刚尝试过,但不幸的是不起作用。由于我的代码配置,我无法使用 viewPageChangeListener。
    • 如果您特别关注通过 setUserVisibleHint() 加载,则保留一个布尔变量来指示数据是否已加载一次,以防止在切换选项卡时进行后续加载。但是,理想的方法是使用 setOffscreenPageLimit。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多