美文网首页
20.12.30附近美食开发总结

20.12.30附近美食开发总结

作者: jeffrey12138 | 来源:发表于2021-01-04 12:04 被阅读0次

    这次开发涉及到5个内容:EventBus使用场景,RecyclerView滑动监听,系统定位权限的申请以及定位处理,网络配置,ViewPager2的使用所以,我会在这里进行前四个部分进行问题解决的方案,第五个会单独写个文章进行全面的剖解

    1 EventBus使用场景:因为有个需求,需要点击tabview之后,viewpager的fragment中的列表就会回到第一条数据,所以当时就想直接用EventBus去使用,但是其实,可以直接在fragment中暴露一个方法(backTop())出来,在tabview的页面进行pager监听方法中的onSelected进行调用

    override fun onSelected(index: Int, totalCount: Int){
    mfragment.backTop()
    }
    

    然后EventBus的应用场景虽然也可以这样用的,但是建议使用在一个页面的信息改变,但是需要通知到其他页面作出改变的场景

    2 RecyclerView滑动监听
    设置滑动监听:

    mRecyclerView.setOnScrollListener(object: RecyclerView.OnScrollListener() {
        override public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
        }
    
        override public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
    
        }
    })
    

    onScrollStateChanged(RecyclerView recyclerView, int newState)这个方法在RecyclerView的滑动状态改,newState=0时,RecyclerView在停止状态中
    newState=1和newState=2时,RecyclerView在滑动状态中
    不同的是,当由0—>1 ,2 时,RecyclerView由静止状态下变为滑动状态,然后1–0 滑动状态变为静止(调用方法 mHomeDateRecyclerView.smoothScrollToPosition(currentPostion); 等这一类方法所触发) , 2–>0 滑动状态变为静止状态(左右滑动RecyclerView 动态的慢慢结束)

    onScrolled(RecyclerView recyclerView, int dx, int dy ) 这个方法在RecyclerView开始滑动时实时回调
    参数dx dy分别是RecyclerView在滑动过程中,在x轴方向(横向滑动)与Y轴方向(纵向滑动)的偏移量
    dx>0 向右滑动
    dx<0 向左滑动

    dy<0 向上滑动
    dy>0 向下滑动

    RecyclerView这部分是参考“早起的年轻人”这位大佬的,里面还有滑动距离监听的方法等,详情请查看下面的地址
    参考地址:
    https://blog.csdn.net/zl18603543572/article/details/77876030

    然后,RecyclerView有时候有业务需求判断是否到了底部,请看下“天热死了”这位大佬的文章,文章地址:
    https://blog.csdn.net/zhouwengong/article/details/81738261

    还有如何滚动到指定位置,请参考下面的文章:
    https://juejin.cn/post/6844904143560114189

    滚动速度的设置请参考下面的地址:
    https://juejin.cn/post/6844903624632434695
    https://juejin.cn/post/6844903624632434696

    3 关于定位权限以及定位处理,了解下定位的几种方法:
    https://blog.csdn.net/ccpat/article/details/106380620
    具体使用:
    https://www.jianshu.com/p/e97d55262bd4

    4关于viewPager切换fragment时,fragment的生命周期变化,请看这位大佬的,详细描述,都写得很清楚:
    https://blog.csdn.net/Meikos/article/details/52076907?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control
    关于这个就总结下,因为这位大佬写得很长,viewPager中,初始化的时候,会预先加载下一个页面fragment,举例:共有四个页面fragment,在初次进入的时候会加载1和2的页面(当前页面为1,1和2都进入onResume),然后切换到2页面,1和2页面生命周期没有任何变化,3页面进行加载(进入到onResume),然后切换3页面,1页面进入销毁,4页面进入到onResume

    那么viewpager在后台和前台切换的时候生命周期的变化是怎么样的呢?
    举例:当前页面是3页面,从前台切换到后台,2,3,4页面都会进入到onStopo的生命周期,而从后台切换到前台,2,3,4页面就会进入到onResume,那么整体在当前activity,finsh掉之后才会全部销毁

    同时需要注意下fragment使用的adapter继承的是有本质的区别的,建议使用FragmentStatePagerAdapter进行继承,为何?请看下面的这个文章:
    https://blog.csdn.net/a527891474/article/details/54099649

    如果遇到fragment页面数据加载页面,这个问题的解决方式极其简单,就是创建viewpager的adapter时不要继承FragmentPagerAdapter,要继承FragmentStatePagerAdapter,一定要记住!!

    原因也很简单,就是因为我们不需要自己去创建和销毁viewpager中的adapter,这两个类中已经帮我们完成了(所以用着会非常非常简单)。

    那么最坑爹的来了,在FragmentPagerAdapter中创建完fragment就不会销毁了,所以会导致再次进入就不会重新创建,当然更不会加载网络数据了。相反FragmentStatePagerAdapter就不会。

    emmmm,总结结束,就是为了让我自己以后遇到相同的问题知道怎么解决,感谢各位大佬的好文章!!真棒

    相关文章

      网友评论

          本文标题:20.12.30附近美食开发总结

          本文链接:https://www.haomeiwen.com/subject/yrohoktx.html