当前位置: 首页 > 知识库问答 >
问题:

ViewPager当前片段可见性

牟辰龙
2023-03-14

我所拥有的

我不能使用onResume(),因为左边和右边的片段已经创建了。我不能使用setUserVisibilityHint(),因为它是在onCreateView()之前调用的,所以视图还没有准备好。

那么,当某个特定片段对用户可见时,应该采用什么方法来动画视图呢?

共有1个答案

宋勇
2023-03-14

我知道这个答案可能有点晚了,但我希望它能帮助其他在类似情况下的人。

您可以使用FragmentViewPager库(我是作者),它处理您面临的问题。其特点是:

  • 允许其片段页在用户实际可见/不可见时得到通知
  • 支持多级FragmentViewPagers(嵌套)
  • 提供控制其分页的方法

基本用法是:

>

  • 编程方式或通过XML将FragmentViewPager附加到活动或片段,就像使用本机ViewPager
  • 一样
  • 设置FragmentViewPager的适配器。适配器应继承com.sbrukhanda.FragmentViewPager.Adapters.FragmentPagerAdaptercom.sbrukhanda.FragmentViewPager.Adapters.FragmentStatePagerAdapter
  • 重写宿主活动的OnResumeFragment()并调用FragmentViewPager.NotifyPagerVisible():

    private FragmentViewPager mFragmentsPager;
    
    @Override 
    public void onResumeFragments() {
        super.onResumeFragments();
        mFragmentsPager.notifyPagerVisible();
        ... 
    }
    

    或托管片段的onResume(),并调用FragmentViewPager.NotifyPagerVisible():

    private FragmentViewPager mFragmentsPager;
    
    @Override 
    public void onResume() {
        super.onResume();
        mFragmentsPager.notifyPagerVisible();
        ... 
    }
    

    重写宿主活动或片段的onpause()并调用FragmentViewPager.NotifyPagerInvisible():

    private FragmentViewPager mFragmentsPager;
    
    @Override 
    public void onPause() {
        super.onPause();
        mFragmentsPager.notifyPagerInvisible();
        ... 
    }
    

    如果希望查看更完整的示例代码,请检查Project的示例项目。

  •  类似资料:
    • 我使用来显示几个片段,在我的上也有。我需要更改中的文本,这取决于当前在中选择的片段。我遇到的问题是:有一些缓存机制,它在片段对用户真正可见之前对它们进行实例化,例如,当我在中选择第二个页面时,也创建了第三个页面的片段。更重要的是,我不能确定片断内部是现在可见的片断还是它只是由创建的,但对用户来说并不是真的可见的。我尝试使用来实现这一目的,但对我来说,对它所做的更改速度太慢(页面滚动,然后我的已经更

    • 我有FragmentA和FragmentB,当FragmentA变回可见时,我有一个设置活动标题的问题。 流动 null 碎片b

    • 下面是我的代码,它有,每个片断类嵌入了上的3个选项卡。我有菜单选项。如所示,通过选择一个选项,我需要更新当前可见的片段。要更新它,我必须调用fragment类中的一个方法。有人能建议一下如何调用那个方法吗? 假设下面是我要调用的具有方法的片段类:

    • 我需要执行一个方法,当片段是可见的(对用户)。此方法用于在片段内显示工具提示。 我有一个活动在布局的底部有viewpager和menubar来导航一个片段。而且我还禁用了ViewPager的滑动。 当片段可见或活动时,我需要调用showTooltip()。我试过使用on resume和setUserVisibleHint(),但仍然不起作用。当viewpager移动到可见页时不显示工具提示。

    • 我有一个ViewPager+FragmentPageAdapter的问题。 场景:我有一个活动在片段a的内部,片段a有一个ViewPager,片段B1,e片段B2。B1 e B2是同一个类,但作为参数的数据不同。 FragmentPagerAdapter 片段B

    • 我有一个父ViewPager,我在其中传递了FragmentStatePagerAdapter。现在片段中有另一个子ViewPager在父ViewPager中。因此,当我尝试对父ViewPager的适配器进行notifyDataSetChanged时,将重新创建所有片段,但子ViewPager的当前项位置仍然与重新创建片段的子ViewPager的位置之前相同。 那么,如何重置子viewpager当