关于ViewPage预加载的问题

让TabFragment页面onCreateView不做任何加载数据操作

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_one, container, false);
    return view;
}

 

在viewpage + tablayout页面加一下代码:

 

private String[] Titles = new String[]{"tab1", "tab2","tab3","tab4"};
private List<Fragment> list_fragment;
   public int totalTabNum = 4;//假如有四个Fragment页面
    public int openTabNum = 0;//当前已打开的页面数量
    MyFragmentPagerAdapter fragmentPagerAdapter;

    private void initViews() {
//        tablayout.setSelectedTabIndicatorHeight(0);
        newsHotFrag = new NewsHotFrag();
        newsVideoFrag = new NewsVideoFrag();
        newsFootballFrag = new NewsFootballFrag();
        newsBasketballFrag = new NewsBasketballFrag();
        list_fragment = new ArrayList<>();
        list_fragment.add(newsAFrag);
        list_fragment.add(newsBFrag);
        list_fragment.add(newsCFrag);
        list_fragment.add(newsDFrag);

        if(list_fragment != null){
            fragmentPagerAdapter = new MyFragmentPagerAdapter(getChildFragmentManager(), list_fragment, Titles);
            newsViewpager.setAdapter(fragmentPagerAdapter);
            tablayout.setupWithViewPager(newsViewpager);
            newsViewpager.setCurrentItem(0);
            newsViewpager.setOffscreenPageLimit(4);
            newsViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }

                @Override
                public void onPageSelected(int position) {
                    //滑动监听加载数据,一次只加载一个标签页
                    if(openTabNum < totalTabNum){
                        list_fragment.get(position);
                    }
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });
        }

    }

    class MyFragmentPagerAdapter extends FragmentPagerAdapter {

        private List<Fragment> fragments;
        private String[] Titles;

        public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> fragments , String[] Titles) {
            super(fm);
            this.fragments = fragments;
            this.Titles = Titles;
        }

        @Override
        public Fragment getItem(int position) {
            return fragments.get(position);
        }

        @Override
        public int getCount() {
            return Titles.length;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return Titles[position];
        }

        //防止fragment自动销毁
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            //super.destroyItem(container, position, object);
        }
    }

 

 回到TabFragment中,让Handler加载数据

private AlarmFragment alarmFragment;//这是使用ViewPager的页面

private boolean is_load = false;
private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        if(!is_load){
            is_load = true;
            if(alarmFragment.openTabNum < alarmFragment.totalTabNum){
                alarmFragment.openTabNum++;
            }
            loadDataList();//加载网络数据的方法
        }
        return ;
    }
};

public void sendMessage(){
    Message message = handler.obtainMessage();
    message.sendToTarget();
}

 本文参考:https://www.jianshu.com/p/66ff0330f2d9

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值