【问题标题】:Avoid google maps requests until fragment is visible with ViewPager在 ViewPager 可见片段之前避免使用谷歌地图请求
【发布时间】:2013-12-31 16:08:09
【问题描述】:

我正在使用 ViewPager 和三个 Fragment。此片段之一 (MapFragment) 使用 google maps Api v2。

public class ViewPagerAdapter extends FragmentStatePagerAdapter{

public static final int NUM_PAGES = 3;
public static final int [] titles = {R.string.map, R.string.bus_stop_favorites, R.string.bus_lines};

private Context context;

public ViewPagerAdapter(Context context, FragmentManager fragmentManager) {
    super(fragmentManager);
    this.context = context;
}

@Override
public Fragment getItem(int position) {
    switch (position) {
    case 0:
        return new MapFragment();
    case 1:
        return new FavoritesFragment();         
    case 2:
        return new LinesFragment();     
    default:
        throw new IllegalArgumentException("La posicion fue " + position + " y deberia ser menor a " + NUM_PAGES);
    }
}

@Override
public int getCount() {
    return NUM_PAGES;
}

@Override
public CharSequence getPageTitle(int position) {
    return context.getString(titles[position]);
}

}

当我运行我的应用程序时,我将片段 1 (FavoriteFragment) 设置为默认值,所以它是我看到的第一个。

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.application_tus);        
    initActionBar();

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    viewPager.setAdapter(new ViewPagerAdapter(this, getSupportFragmentManager()));

    TitlePageIndicator titleIndicator = (TitlePageIndicator)findViewById(R.id.titles_viewpager);
    titleIndicator.setViewPager(viewPager,1);
    }
}

MapFragment 是 FavoriteFragment 的兄弟,所以它在我的应用启动并且 Google Map API 请求完成时加载。但是 Google Maps API 有配额限制,所以我喜欢 MapFragment 仅在可见时才执行 Google Map API 请求,如果用户不向左滑动,则 MapFragment 不可见并且任何请求都已完成。

这张图片显示了 ViewPager 上的三个片段

【问题讨论】:

    标签: android android-fragments google-maps-android-api-2 supportmapfragment


    【解决方案1】:

    您可以将视图寻呼机的屏幕外限制设置为 0,以便它只加载当前可见的片段......

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

    编辑: 显然,如果您将其设置为 0,则默认设置为 1,因此另一种方法是在位置 0(即最左边的片段)添加一个虚拟片段,然后在它变得可见时将其动态替换为您的地图片段(使用 OnPageChangeListener)

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

    【讨论】:

    • 感谢您的回答,但无法将屏幕外限制设置为 0...minimun 为 1,如果您尝试设置 0,则 ViewPager 设置为 1...>。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2015-12-11
    相关资源
    最近更新 更多