我有一个带有三个不同 fragment 的滑动选项卡,用于三个选项卡。 FragmentPagerAdapter 中的 getItem 方法调用了两次。我的第一个选项卡加载本地数据,并且与接下来的两个选项卡(tab2、tab3)具有不同的布局。 Tab2 和 Tab3 从服务器获取数据并相应地加载。

我的问题是,第一次加载 getItem 调用两次,这会导致 tab1 和 tab2 都被执行。虽然 tab1 只包含本地数据,但由于两次调用 tab2 执行并从服务器获取数据。

我不想执行 tab2 和它的功能,而我在 tab1 等等。
getItem() 代码:

@Override public Fragment getItem(int position) {
    Fragment fragment = null;
    switch (position) {
        case 0: fragment = new CommentFragment(); break;
        case 1: fragment = new AllPostFragment(); break;
        case 2: fragment = new TodayFragment(); break;
    }
    return fragment;
}

所以,我正在寻找解决方案。如果可以,请帮帮我。

最佳答案

在 ViewPager 中,您的 ViewPager 将加载多少屏幕( fragment )是有限制的。您可以通过调用 ViewPagers setOffscreenPageLimit 方法来设置它。

但是,如果您检查 ViewPagers code ,它会告诉您必须至少加载 1 个屏幕外页面:

private static final int DEFAULT_OFFSCREEN_PAGES = 1;

public void setOffscreenPageLimit(int limit) {
    if (limit < DEFAULT_OFFSCREEN_PAGES) {
        Log.w(TAG, "Requested offscreen page limit " + limit
            + " too small; defaulting to " + DEFAULT_OFFSCREEN_PAGES);
        limit = DEFAULT_OFFSCREEN_PAGES;
    }
    // ...
}

底线:我认为您不能只加载当前 Fragment,抱歉。

编辑:但是,如果您想仅在 Fragments 对用户可见时才从网络加载数据,您可以在 Fragments 中执行类似操作:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        // Fetch data or something...
    }
}

关于android - getItem 被调用两次,这导致 tab1 和 tab2 都在 FragmentPagerAdapter 中执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30342569/

10-13 04:14