结对编程的第1例:主要着眼于,解决RecyclerView的头部伸缩时,抖动的功能

2 篇文章 0 订阅
1 篇文章 0 订阅

1.工具。人员。会议室准备。

2.先展示一遍代码,整个需求流程讲解一下。

目前做了哪些
想要什么样的效果
遇到了什么样的问题

3.发哥揭示出了问题的原理(从另一个观察的角度)

发哥联想到了近来玩的一个桌球APP

然后展示了可能出现问题的手指按住后抬起,导致的焦点偏移情况

4.那么问题的关键就出来了,既然是自动滑动与手指按住的冲突,那么在自动滑时,禁止RecyclerView对手指作出相应就好

5.尝试把RecyclerView在特定时段,设置为禁止滚动(滑动)

1.尝试了 recycler.setNestedScrollEnable(false) 方法
————>没有效果

2.尝试了

LinearLayoutManager linearLayoutManager = new LinearLayoutManager( getActivity(),
      LinearLayoutManager.VERTICAL, false) 
{  
     @Override  
    public boolean canScrollVertically() {
            return false;
    }
}
recyclerview.setLayoutManager(linearLayoutManager);  

————>没有效果

3.尝试了

void setLayoutFrozen (boolean frozen)
recyclerview.setLayoutManager(true)  //实现冻结。

——————>这一方法,实现了RecyclerView的禁止手指触控响应功能。手指无法对RecyclerView进行操作。(但是:这一方法,需要配合 #6 点,才能完美实现功能。)

6.在setLayoutFrozen 冻结Recycler之前,要先停止Recycler的滚动(滑动)

不然会报异常:
"Do not setLayoutFrozen in layout or scroll"·

原因是在于:设置 冻结 方法的同时,Recycler仍处在滚动的状态。 setLayoutFrozen的内部,会自行先检测,是否处于 layout方法 或 scroll方法 的状态下。如果是,则会抛出异常。

解决方法:

    //强制停止RecyclerView滑动方法  
    public static void forceStopRecyclerViewScroll(RecyclerView mRecyclerView) {   
            mRecyclerView.dispatchTouchEvent(
                         MotionEvent.obtain(SystemClock.uptimeMillis(),  
                         SystemClock.uptimeMillis(), 
                         MotionEvent.ACTION_CANCEL, 0, 0, 0));  
    }  

操作步骤:直接在要停止Recycler滚动的地方(比如recyclerview.setLayoutManager(true)之前),塞入这句。则可以实现先停止滚动,然后冻结Recycler。

7.继续,要美化一下Recycler向上滑到,头部缩回去后,有一部分文字内容,仍没有完全显示出来,需要再手动往上滑一点点以显示,的这个问题

很简单的采用网上的两个方法:

recycler.smoothScrollToPosition( 0 )

以及

recycler.scrollToPosition( 0 )

两者的区别,在于 smoothScroll ,会平滑的滚动过去;
而scroll,则会直接滚动到指定位置。

实际使用中:
scroll使用,很完美。完美达到需求。
smoothScroll,会触发 frozen冻结的 "Do not setLayoutFrozen in layout or scroll"· 问题。暂时还不知道如何解决。

于是,决定先采用 scroll,效果也确实满足了要求。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值