【问题标题】:Cancel RecyclerView vertical fling/swipe取消 RecyclerView 垂直甩动/滑动
【发布时间】:2018-06-16 22:59:20
【问题描述】:

我目前正在检测特定视图何时对用户可见或消失并在该视图位置停止RecyclerView 滚动。到目前为止,我已经能够在OnScrollListener 以及RecyclerView.stopScrollRecyclerView.scrollTo 的帮助下实现这一点,但现在唯一的问题是,如果用户抛出列表,它将超过该视图位置。在调用滚动到位置后仍在“作用”,导致列表超出项目位置。

如何以编程方式结束用户投掷操作?像recyclerView.fling(0) 这样的东西存在吗?

【问题讨论】:

    标签: android android-recyclerview kotlin


    【解决方案1】:

    在调用RecyclerView.stopScroll 之后,我最终使用LinearLayoutManager.scrollToPositionWithOffset 和目标的位置和0 作为偏移量。

    到目前为止,当同时使用这两者时,投掷行为不再导致列表滚动超出预期位置。

    【讨论】:

      【解决方案2】:
       public class CustomLayoutManager extends LinearLayoutManager {
       private boolean isScrollEnabled = true;
      
       public CustomLayoutManager (Context context) {
        super(context);
       }
      
       public void setScrollEnabled(boolean flag) {
        this.isScrollEnabled = flag;
       }
      
       @Override
       public boolean canScrollVertically() {
        //Similarly you can customize "canScrollHorizontally()" for managing horizontal scroll
        return isScrollEnabled && super.canScrollVertically();
       }
      }
      

      将此设置为您的 recyclerview 布局管理器,并使用 layoutManager 对象使用 setScrollEnabled(true/false) 切换滚动

      假设你的 Recyclerview rv

       CustomLayoutManager lm=new CustomLayoutManager(context of your activity);
       rv.setLayoutManager(lm);
       lm.setScrollEnabled(true/false);
      

      【讨论】:

      • 这个作用和`RecyclerView.stopScroll一样,当用户甩的时候还是会过冲。
      • itemView.rv_child_stories.clearOnScrollListeners() itemView.rv_child_stories.onFlingListener = null 我已经使用上面的代码实现了对不起它在kotlin中
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 2023-04-05
      • 2017-02-07
      相关资源
      最近更新 更多