在加载应用程序打开的所有片段 [英] Load all fragments on app opening

查看:109
本文介绍了在加载应用程序打开的所有片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用片段创建一个页面适配器的应用程序。我使用它来创建它加载不同片段的刷卡标签。每个片段输出的WebView它显示一个特殊格式的网站。现在我的应用程序只加载它是碎片和那些到左边和右边。我想一次和永远不会再加载所有六个选项卡。有没有办法做到这一点?

 进口android.content.res.Configuration;
进口android.os.Bundle;
进口android.support.v4.app.Fragment;
进口android.support.v4.app.FragmentActivity;
进口android.support.v4.app.FragmentManager;
进口android.support.v4.app.FragmentPagerAdapter;
进口android.support.v4.view.ViewPager;公共类MainActivity扩展FragmentActivity {    ViewPager viewPager = NULL;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
            super.onCreate(savedInstanceState);
            的setContentView(R.layout.activity_main);
            viewPager =(ViewPager)findViewById(R.id.pager);
            FragmentManager fragmentManager = getSupportFragmentManager();
            viewPager.setAdapter(新MyAdapter(fragmentManager));
    }    @覆盖
    公共无效onConfigurationChanged(配置NEWCONFIG){
      super.onConfigurationChanged(NEWCONFIG);
    }}类MyAdapter扩展FragmentPagerAdapter {
    公共MyAdapter(FragmentManager FM){
            超(FM);            // TODO自动生成构造函数存根
    }    @覆盖
    公共片段的getItem(int i)以{
            片段片段= NULL;
            如果(我== 0)=片段介绍新();
            如果(我== 1)片段=新球馆();
            如果(我== 2)片段=新游戏();
            如果(我== 3)=片段新型机器人();
            如果(我== 4)片段=新的赛会();
            如果(我== 5)片段=新词汇表();
            返回片段;
    }    @覆盖
    公众诠释的getCount(){
            // TODO自动生成方法存根
            返回6;
    }    公共CharSequence的getPageTitle(INT位置){
            字符串title =新的String();
            如果(位置== 0)返回摘要;
            如果(位置== 1)回归竞技场;
            如果(位置== 2)回报比赛;
            如果(位置== 3)回归机器人;
            如果(位置== 4)回归的对抗赛;
            如果(位置== 5)返回词汇表;
            返回null;
    }
}


解决方案

通话<一个href=\"http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit%28int%29\">setOffscreenPageLimit比一半的片段更高一些。
这将迫使viewpager创建和保存所有创建的片段,你在你的适配器有。

  @覆盖
保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
        viewPager =(ViewPager)findViewById(R.id.pager);
        //用一些高于一半的片段。
        viewPager.setOffscreenPageLimit(4);
        FragmentManager fragmentManager = getSupportFragmentManager();
        viewPager.setAdapter(新MyAdapter(fragmentManager));
}

I have an app that uses fragments to create a page adapter. I use this to create a swipe tab which loads a different fragment. Each fragment loads webview which displays a specially formatted website. Right now my app only loads the fragments it is on and the ones to the left and right of it. I would like to load all six tabs at once and never again. Is there a way to do this?

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;

public class MainActivity extends FragmentActivity {

    ViewPager viewPager=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            viewPager = (ViewPager) findViewById(R.id.pager);
            FragmentManager fragmentManager=getSupportFragmentManager();
            viewPager.setAdapter(new MyAdapter(fragmentManager));     
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
    }

}

class MyAdapter extends FragmentPagerAdapter {


    public MyAdapter(FragmentManager fm) {
            super(fm);

            // TODO Auto-generated constructor stub
    }

    @Override
    public Fragment getItem(int i) {
            Fragment fragment=null;
            if(i==0)fragment=new Introduction();
            if(i==1)fragment=new Arena();
            if(i==2)fragment=new Game();
            if(i==3)fragment=new Robot();
            if(i==4)fragment=new Tournament();
            if(i==5)fragment=new Glossary();
            return fragment;
    }

    @Override
    public int getCount() {
            // TODO Auto-generated method stub
            return 6;
    }

    public CharSequence getPageTitle(int position) {
            String title=new String();
            if(position==0)return "Summary";
            if(position==1)return "The Arena";
            if(position==2)return "The Game";
            if(position==3)return "The Robot";
            if(position==4)return "The Tournament";
            if(position==5)return "Glossary";
            return null;
    }
}

解决方案

call setOffscreenPageLimit with a number higher than half your fragments. This will force the viewpager to create and keep all of the fragments created as you have in your adapter.

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager) findViewById(R.id.pager);
        // use a number higher than half your fragments.
        viewPager.setOffscreenPageLimit(4);
        FragmentManager fragmentManager=getSupportFragmentManager();
        viewPager.setAdapter(new MyAdapter(fragmentManager));     
}

这篇关于在加载应用程序打开的所有片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆