getItem被调用两次,这导致tab1和tab2都在FragmentPagerAdapter中执行

deb*_*ror 4 android android-fragments fragmentpageradapter

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

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

我不想在tab1中执行tab2及其功能,依此类推.

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; 
}
Run Code Online (Sandbox Code Playgroud)

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

vil*_*e89 12

在ViewPager中,您的ViewPager将加载多少个屏幕(片段).您可以通过调用ViewPagers setOffscreenPageLimit方法来设置它.

但是,如果您检查ViewPagers代码,它会告诉您必须至少在屏幕外加载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;
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

一句话:我不认为你只能加载当前的片段,抱歉.

编辑:但是如果你想加载,比如只有当片段对用户可见时才从网络加载,你可以在片段中做这样的事情:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        // Fetch data or something...
    }
}
Run Code Online (Sandbox Code Playgroud)