Fragment在ViewPager里面的可见、隐藏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fragment在ViewPager里面的可见、隐藏相关的知识,希望对你有一定的参考价值。

参考技术A 在操作 ViewPager 时,需要知道 Fragment 对用户展示、隐藏的时刻。

因为 ViewPager 通过 setOffscreenPageLimit 提供预加载的功能,所以传统生命周期的 onResume() 、 onPause() 不能准确的表达Fragment对用户是否可见。
传统的做法是给 ViewPager 的 onPageSelect() 事件里,发送一个广播,通知 Fragment 当前页发生了变化。 Fragment 对比自身 position 和广播携带的参数 position 是否一致,判断自己是否当前页,以此来执行 展示、隐藏操作。

Fragment的生命周期里,提供了一个 setUserVisibleHint(boolean isVisibleToUser) 函数。它的作用是告诉系统Fragment是否对用户可见,使用场景是在 ViewPager 的适配器 FragmentStatePagerAdapter 和 FragmentStatePagerAdapter
我们看下引用这个函数的地方

需要注意的是, setUserVisibleHint() 和 Fragment 的生命周期是没关联的的。

setUserVisibleHint,在 ViewPager 左右滑动的时候,因为预加载的机制,所以页面已经初始化好;
但是通过 setCurrentItem(页码); 跳到某个页面时,此时页面还未初始化。

我们业务里面的操作,需要页面布局已经完成,因此在使用它的时候,我们需要额外的技巧,下面修改后的 XLBaseFragment
子类重写 showToUserInViewPager 和 hideToUserInViewPager() 即可

cathome 猫家 开发日记-tablayout+viewpager+fragment

概述

1.tablayout。纯粹就是一个滑动菜单,只是多加一个事件,触发viewpager的滑动。

2.viewpage,是主角,一般是设定  adapter,在 adapter中,决定如何显示view,以及显示多少个view.

   这里系统已经封装了一个adapter叫 fragmentadapter.转为针对view里面放fragment  的。并且主要方法为 public Fragment getItem(int i)

所以建立多个fragment  .并传递给adapter. 就可以。主体上结构其实很简单。

 

1.初始化2个空间
FindControls(view_content); SetupTablayout(); SetupViewPager();
2.简单到死。建立 list<fragment> 传递给 adapter,这个派生的adapter。其实很简单。 private void SetupViewPager() { List<Fragment> fragments=new ArrayList<>(); fragments.add(new life()); fragments.add(new birth()); fragments.add(new illness()); fragments.add(new other()); LSUIViewPagerFragmentAdapter adapter_fragment=new LSUIViewPagerFragmentAdapter(getSupportFragmentManager(),fragments); mPages.setAdapter(adapter_fragment); }

 

派生的adapter
package com.utils.widgets;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import java.util.ArrayList;
import java.util.List;

public class LSUIViewPagerFragmentAdapter extends FragmentPagerAdapter
{
    private List<Fragment> mFragments;

    public LSUIViewPagerFragmentAdapter(FragmentManager fm, List<Fragment> fragments)
    {
        super(fm);
        mFragments=fragments;
        if(mFragments==null)
        {
            mFragments=new ArrayList<>();
        }
    }

    @Override
    public Fragment getItem(int i)
    {
        return mFragments.get(i);
    }

    @Override
    public int getCount()
    {
        return mFragments.size();
    }
}

 


以上是关于Fragment在ViewPager里面的可见、隐藏的主要内容,如果未能解决你的问题,请参考以下文章

在 viewpager 中获取当前 Fragment 实例

Fragment ViewPager 适配器

如何知道片段何时在 viewpager 中实际可见

如何将 ViewPager 的高度包装到其当前 Fragment 的高度?

关于tablayout+viewpager+fragment配合使用的一点记录

Fragment中的ViewPager的Fragment添加子Fragment要放在onAttach中添加