ViewPager+ Fragment结合的setUserVisibleHint()调用时机

这篇具有很好参考价值的文章主要介绍了ViewPager+ Fragment结合的setUserVisibleHint()调用时机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近的项目使用到了ViewPager + Fragment的模式,要求在每次Fragment获取显示的时候来刷新数据,该项目下ViewPager有5个子fragment,在onCreateView及fragment的**setUserVisibleHint(bool isVisibleToUser)**中的isVisibleToUser为true的时候刷新数据的时候出现数据多次刷新的情况,因此对ViewPage + Fragment的生命周期做了研究。

项目布局最顶层5个button,主体是ViewPager+fragment, 可以通过点击button直接跳转到对应的fragment,也可以通过左右滑动来进行相邻跳转。

ViewPager+ Fragment结合的setUserVisibleHint()调用时机,android,开发语言,职场和发展,android studio,面试

为了研究多个fragment的生命周期,加入打印如下:

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Slog.i("onCreateView 3");
        View view = inflater.inflate(R.layout.my_police_events_fragment, container, false);
        return view;
    }
 
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        Slog.i("setUserVisibleHint 3 " + isVisibleToUser);
        super.setUserVisibleHint(isVisibleToUser);
    }
 
    @Override
    public void onDestroyView() {
        Slog.i("onDestroyView 3 ");
        super.onDestroyView();
    }
1. 第一次进入该activity,fragment1被选中,打印如下:
第一次进入
setUserVisibleHint 1 false
setUserVisibleHint 2 false
setUserVisibleHint 1 true
onCreateView 1
onCreateView 2

参数为true

2. 从fragment1切换到fragment2,fragment2被选中,打印如下:
1--->2
setUserVisibleHint 3 false
setUserVisibleHint 1 false
setUserVisibleHint 2 true
onCreateView 3

创建了fragment3,且fragment2中的setUserVisibleHint参数为true

3.从fragment2切换到fragment3,fragment3被选中,打印如下:
2--->3
setUserVisibleHint 4 false
setUserVisibleHint 2 false
setUserVisibleHint 3 true
onDestroyView 1 
onCreateView 4

创建了fragment4,销毁了fragment1,且fragment3中的setUserVisibleHint参数为true

4. 后面滑动的过程日志打印如下:
3--->2
setUserVisibleHint 1 false
setUserVisibleHint 3 false
setUserVisibleHint 2 true
onCreateView 1
onDestroyView 42--->3
setUserVisibleHint 4 false
setUserVisibleHint 2 false
setUserVisibleHint 3 true
onDestroyView 1 
onCreateView 43--->4
setUserVisibleHint 5 false
setUserVisibleHint 3 false
setUserVisibleHint 4 true
onDestroyView 2
onCreateView 54--->5
setUserVisibleHint 4 false
setUserVisibleHint 5 true
onDestroyView 3 

猜测:通过以上日志,可以发现,不论fragment如何变化,首先被选中的fragment会调用参数为true的setUserVisibleHint方法,被选中的fragment与相邻的fragment的状态肯定是onCreate的状态(如果未create就调用onCreateView,如果已经是onCreate的状态不调用),相邻的fragment会调用参数为false的setUserVisibleHint方法,其他的fragment是处于onDestroy的状态。

5. 为了验证我们的猜想,将不再采用相邻滑动的方式,采用button点击跳转的方式来检验fragment的生命周期。相关打印如下:
5--->2
setUserVisibleHint 2 false
setUserVisibleHint 1 false
setUserVisibleHint 3 false
setUserVisibleHint 5 false
setUserVisibleHint 2 true
onCreateView 2
onCreateView 1
onCreateView 3
onDestroyView 4 
onDestroyView 52--->4
setUserVisibleHint 4 false
setUserVisibleHint 5 false
setUserVisibleHint 2 false
setUserVisibleHint 4 true
onCreateView 4
onCreateView 5
onDestroyView 2 
onDestroyView 1 

总结:

可以看到,不管fragment如何变化,都是按照上面的规则进行变动的,知道了fragment的生命周期,那么就可以选择在合适的时期对我们的数据进行处理了,避免出现数据未加载或者多次加载的情况了。

更多Android进阶指南 可以扫码 解锁 《Android十大板块文档》

1.Android车载应用开发系统学习指南(附项目实战)

2.Android Framework学习指南,助力成为系统级开发高手

3.2023最新Android中高级面试题汇总+解析,告别零offer

4.企业级Android音视频开发学习路线+项目实战(附源码)

5.Android Jetpack从入门到精通,构建高质量UI界面

6.Flutter技术解析与实战,跨平台首要之选

7.Kotlin从入门到实战,全方面提升架构基础

8.高级Android插件化与组件化(含实战教程和源码)

9.Android 性能优化实战+360°全方面性能调优

10.Android零基础入门到精通,高手进阶之路

敲代码不易,关注一下吧。ღ( ´・ᴗ・` ) 🤔文章来源地址https://www.toymoban.com/news/detail-678970.html

到了这里,关于ViewPager+ Fragment结合的setUserVisibleHint()调用时机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android:ViewPager2

    ViewPager2内部使用RecyclerView实现,并提供了增强功能 支持水平、垂直方向布局 android:orientation = “vertical” 支持从右到左 android:layoutDirection = “rtl” 禁止滑动 setUserInputEnabled() 可修改Fragment集合 对可修改的Fragment集合进行分页浏览,底层集合更改时调用notifyDatasetChanged来更新页

    2024年02月09日
    浏览(38)
  • android viewpager 禁止滑动

    本文介绍了本人有一个相关的需求需要实现这一功能,在过程中发现自己之前没做过,然后记录下实现这一功能的过程及相关的小知识点。 viewpager 禁止滑动,就是在特殊的条件,比如说编辑的状态下,是不允许用户滑动的,但是看了下viewpager 的源码,也百度了一下,并没有

    2024年01月19日
    浏览(46)
  • Android问题笔记三十六:ViewPager嵌套RecyclerView,降低ViewPager灵敏度

    Unity3D特效百例 案例项目实战源码 Android-Unity实战问题汇总 游戏脚本-辅助自动化 Android控件全解手册 再战Android系列 Scratch编程案例 软考全系列 Unity3D学习专栏 蓝桥系列 ChatGPT和AIGC 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、工具、素材、源码、游戏等

    2024年02月07日
    浏览(46)
  • 关于Android ViewPager禁止滑动

    ViewPager经常被用来实现轮播图,页面切换的效果。 关于页面切换,可以搭配Fragment+TabLayout,感兴趣的可以去看一下我之前的文章: TabLayout 加 ViewPager实现类似选项卡可切换的功能_水很清的博客-CSDN博客  关于实现轮播图的,我之前也有封装过,使用起来很简单,也好用,链接

    2024年02月16日
    浏览(53)
  • Android 之 ViewPager 的简单使用

    本节带来的是Android 3.0后引入的一个UI控件——ViewPager(视图滑动切换工具),实在想不到 如何来称呼这个控件,他的大概功能:通过手势滑动可以完成View的切换,一般是用来做APP 的引导页或者实现图片轮播,因为是3.0后引入的,如果想在低版本下使用,就需要引入v4 兼容包哦

    2024年02月06日
    浏览(48)
  • Android——禁止ViewPager的左右滑动功能实现

    Android——禁止ViewPager的左右滑动功能实现 在Android开发中,ViewPager是一种常用的滑动控件,用于实现页面的左右切换效果。然而,在某些场景中,我们可能需要禁止ViewPager的左右滑动功能,只允许通过其他方式进行页面切换。本文将介绍如何在Android中实现禁止ViewPager左右滑动

    2024年02月06日
    浏览(45)
  • Android UI--ViewPager扩展Tab标签指示

    android:layout_below=“@+id/ll_viewpager” android:scaleType=“matrix” android:src=“@drawable/cursor” / android.support.v4.view.ViewPager android:id=“@+id/viewpager” android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:layout_below=“@+id/cursor” android:flipInterval=“30” android:persistentDrawingCache=“

    2024年03月19日
    浏览(43)
  • Android:单Activity多Fragment,Navigation实现Fragment跳转,Fragment之间通过ViewModel共享数据

    1、activity_main.xml 2、MainActivity FragmentA:包括SeekBar和一个按钮,点击button跳转到FragmentB FragmentB:SeekBar加一和减一操作的按钮,一个返回FragmentA的按钮,即经过加减操作以后,在FragmentA上显示加减的结果。 nav_graph.xml 1、fragment_home.xml 2、HomeFragment 1、fragment_detail.xml 2、DetailFragm

    2023年04月08日
    浏览(39)
  • Android GridPager实战,从RecyclerView to ViewPager

    这个简单的的案例展示了如何从 RecyclerView to ViewPager ,以网上的公开图片为样例。 其中,需要特别说明的目录 transition ,这个资源目录包含了图片的淡入淡出动画和一些转场效果; adapter 和 fragment 则是对应布局容器。 给出 MainActivity 代码: 讲一下代码中的 FragmentManager ,这

    2024年02月16日
    浏览(40)
  • Android修行手册 - 使用ViewPager2实现画廊效果

    Unity3D特效百例 案例项目实战源码 Android-Unity实战问题汇总 游戏脚本-辅助自动化 Android控件全解手册 再战Android系列 Scratch编程案例 软考全系列 Unity3D学习专栏 蓝桥系列 ChatGPT和AIGC 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、工具、素材、源码、游戏等

    2024年02月22日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包