【问题标题】:Load all fragments on app opening在应用打开时加载所有片段
【发布时间】:2020-11-20 14:36:56
【问题描述】:

我有一个使用片段来创建页面适配器的应用程序。我用它来创建一个加载不同片段的滑动选项卡。每个片段都会加载显示特殊格式网站的 webview。现在我的应用程序只加载它所在的片段以及它左侧和右侧的片段。我想一次加载所有六个选项卡,再也不要加载了。有没有办法做到这一点?

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;
    }
}

【问题讨论】:

    标签: android android-fragments android-webview


    【解决方案1】:

    致电setOffscreenPageLimit 并使用高于一半碎片的数字。 这将强制 viewpager 创建并保留您在适配器中创建的所有片段。

    @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));     
    }
    

    【讨论】:

    • 好一个.. 这对我有帮助
    • Android API 30 这似乎不再工作了
    【解决方案2】:

    在科特林中:

    viewPager.offscreenPageLimit = size / 2
    

    默认 offscreenPageLimit = 1,意味着它在当前片段的两侧加载 1 个片段。共 3 个碎片

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多