首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在SwipeRefreshLayout中禁用刷新,而拖放事件从上到下发生在回收视图Android?

在SwipeRefreshLayout中禁用刷新,同时允许拖动事件从上到下发生在回收视图,可以通过以下步骤实现:

  1. 创建一个自定义的SwipeRefreshLayout子类,例如CustomSwipeRefreshLayout。
  2. 在CustomSwipeRefreshLayout类中重写canChildScrollUp()方法,该方法用于判断子视图是否可以向上滚动。在这里,我们需要返回false来禁用刷新功能,同时允许拖动事件从上到下发生在回收视图。代码示例如下:
代码语言:txt
复制
public class CustomSwipeRefreshLayout extends SwipeRefreshLayout {
    private View mTarget;

    public CustomSwipeRefreshLayout(Context context) {
        super(context);
    }

    public CustomSwipeRefreshLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean canChildScrollUp() {
        if (mTarget != null) {
            if (mTarget instanceof RecyclerView) {
                RecyclerView recyclerView = (RecyclerView) mTarget;
                return recyclerView.canScrollVertically(-1);
            } else {
                return mTarget.canScrollVertically(-1);
            }
        }
        return super.canChildScrollUp();
    }

    @Override
    public void setRefreshing(boolean refreshing) {
        super.setRefreshing(refreshing);
        if (!refreshing) {
            setEnabled(true);
        }
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
            final View target = mTarget;
            final float y = ev.getY();
            if (target != null && y < target.getTop()) {
                setEnabled(false);
            }
        }
        return super.onInterceptTouchEvent(ev);
    }

    @Override
    public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
        if (mTarget != null && mTarget instanceof RecyclerView) {
            RecyclerView recyclerView = (RecyclerView) mTarget;
            recyclerView.requestDisallowInterceptTouchEvent(disallowIntercept);
        }
        super.requestDisallowInterceptTouchEvent(disallowIntercept);
    }

    @Override
    public void setEnabled(boolean enabled) {
        super.setEnabled(enabled);
        if (!enabled) {
            setRefreshing(false);
        }
    }

    @Override
    public void setOnChildScrollUpCallback(OnChildScrollUpCallback callback) {
        super.setOnChildScrollUpCallback(callback);
        if (callback != null) {
            mTarget = callback.getScrollUpView();
        }
    }
}
  1. 在你的布局文件中使用CustomSwipeRefreshLayout替代SwipeRefreshLayout,例如:
代码语言:txt
复制
<com.example.CustomSwipeRefreshLayout
    android:id="@+id/swipeRefreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Your content here -->

</com.example.CustomSwipeRefreshLayout>

通过以上步骤,你可以在SwipeRefreshLayout中禁用刷新,同时允许拖动事件从上到下发生在回收视图。请注意,这里的CustomSwipeRefreshLayout类只是一个示例,你可以根据自己的需求进行修改和扩展。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云计算产品:https://cloud.tencent.com/product
  • 云原生产品:https://cloud.tencent.com/product/cns
  • 数据库产品:https://cloud.tencent.com/product/cdb
  • 服务器运维产品:https://cloud.tencent.com/product/cvm
  • 网络安全产品:https://cloud.tencent.com/product/ddos
  • 音视频处理产品:https://cloud.tencent.com/product/mps
  • 人工智能产品:https://cloud.tencent.com/product/ai
  • 物联网产品:https://cloud.tencent.com/product/iotexplorer
  • 移动开发产品:https://cloud.tencent.com/product/mobapp
  • 存储产品:https://cloud.tencent.com/product/cos
  • 区块链产品:https://cloud.tencent.com/product/baas
  • 元宇宙产品:https://cloud.tencent.com/product/um

请注意,以上链接仅为示例,具体的产品选择和推荐应根据实际需求和情况进行决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SwipeRefreshLayout与RecyclerView的巧夺天工

同理,当你的子视图用布局包裹的时候,其就是你自定义的,除非你的子视图只有ListView,当有多个控件时候,其默认找不到ListView监听其滑动事件,必须重写该方法。...㈡重写SwipeRefreshLayout 既然找不到该子视图,那么就必须传入子视图的控件,以监听其滑动状态,也就是自定义一个属性: <declare-styleable name="LYJSwipeLayoutAttrs...(Color.RED);//设置加载内圈颜色 this.<em>swipeRefreshLayout</em>.setOnRefreshListener(this);//设置下拉<em>刷新</em><em>事件</em>...从这里可以看到,虽然说ListView有点击<em>事件</em>,有许多扩展,但你想扩展ListView就必须重构很多地方。<em>而</em>RecyclerView,虽然什么都没有,但你扩展起来要方便的多。这就是从0开始的优势。...当一个框架继承了很多很多东西,那么你要修改其中的东西,那么就是牵一<em>发</em><em>而</em>动全身。没有最适合的框架,只有最优解。

1.4K20

Android开发笔记(一百二十三)下拉刷新布局SwipeRefreshLayout

SwipeRefreshLayout最早在19.1的support-v4库引入,所以要先确保sdk的“Android Support Library”版本不低于19.1。...SwipeRefreshLayout的旧版与新版之间的界面区别主要有: 1、旧版的进度条是布局顶部的一条横线,新版的布局顶部的一个圆圈。...首先要注意:在布局文件android.support.v4.widget.SwipeRefreshLayout下面只能有一个直接子视图,如果有多个子视图,那么将只展示第一个子视图,后面的子视图将不予展示...从网上资料来看,大家给SwipeRefreshLayout添加上拉加载主要有两种思路: 1、重写SwipeRefreshLayout,在dispatchTouchEvent方法捕获上拉事件,并进行合理性校验之后...2、调用RecyclerView的setOnTouchListener方法,并实现一个触摸监听器传给该方法,监听器也是一样捕获上拉事件并进行后续处理。

1.9K30
  • AndroidSwipeRefreshLayout和ViewPager滑动冲突的原因和正确的解决方式

    1、监听ViewPager的OnTouch事件,滑动的时候禁用swipeRefreshLayout mViewPager.setOnTouchListener(new View.OnTouchListener...Android事件分发源码分析,告别事件冲突 ————2017.06.16———— 随着版本更新,android事件分发的机制也原来越完善,老的文章已经不适合了,我已经不知道是我当时写错了还是SwipeRefreshLayout...// 估计原本用于判断是否正在刷新,后来用了其他方式判断。...什么时候Y轴滑动距离会大于mTouchSlop不被ViewPager响应到事件呢。...要知道两次Touch之间也是有个很短的响应时间的,只要在这个时间内,Y轴滑动距离大于mTouchSlop就可以了,这时候事件就被拦截了,ViewPager没机会响应到move事件,从而不会禁用SwipeRefreshLayout

    1.5K10

    学习笔记 | Android Studio安卓开发入门经验总结 干货

    3.3.2 网络请求与异步线程 Android 4.0以后网络请求不能在主线程执行已经是老生常谈了,这是为例放置线程阻塞应用无响应。...“工人”如何给Handler一条消息?...3.3.5 回收型列表视图RecyclerView的使用 RecyclerView是基于viewholder的回收理念在ListView上的一个升级版,功能强大,当然在不需要进行回收的场景就当然不要用了...和ListView类似,要将数据适配到视图上进行展示需要使用适配器Adapter,不同的是RecyclerView的BaseAdapter已经将viewholder模式封装好了,目前RecyclerView...同样的,这样的理念也可以运用到有着多种网络请求的场景,使用工厂模式和适配器理念,将网络请求返回结果适配到实体类对象或UI视图里,这对于降低耦合度和提高多态性是很有帮助的。 4.

    2.4K60

    绝对想尝试的创意 Android 库,你关注了吗?| 码云周刊第 43 期

    项目简介: 正如名字所说,SmartRefreshLayout 是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的 View,还支持多层嵌套的视图结构。...也吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout,其他第三方的 TwinklingRefreshLayout 、Ultra-Pull-To-Refresh。...支持自动刷新、自动上拉加载(自动检测列表惯性滚动到底部,不用手动上拉)。 支持自定义回弹动画的插值器,实现各种炫酷的动画效果。 支持设置主题来适配任何场景的 App,不会出现炫酷但很尴尬的情况。...项目简介:本项目是一个基于 Android 可以弹幕的 ImageView 组件,比较流行的直播弹幕是我写这个View的灵感,可自定义设置设置弹幕的行数、方向、速度等;也支持 AndroidStudio...点击事件 项目地址: https://gitee.com/qibin/LabelView

    1.2K90

    Android开发笔记(一百六十四)仿京东首页的下拉刷新

    倒是第三点的下拉刷新,以及第二点的上拉监听,却不容易实现。 虽然Android提供了专门的下拉刷新布局SwipeRefreshLayout,但它并没有页面随手势下滚的效果。...倘若还没拉到顶,继续下拉动作属于正常的页面滚动;倘若已经拉到顶了,继续下拉动作才会拉出头部提示刷新。所以此处得捕捉页面滚动到顶部的事件,相对应的则是页面滚动到底部的事件。...这个和事佬必须是下拉布局和滚动视图的上级布局,考虑到下拉布局在上,滚动视图在下,故它俩的上级布局继承线性布局LinearLayout比较合适。.../底部的事件,触摸监听器用于处理下拉过程的持续位移。...水平方向的左右滑动,不做额外处理; 2、垂直方向的向上拉动,不做额外处理; 3、下拉的时候,如果尚未拉到页面顶部,也不做额外处理; 4、拉到顶之后继续下拉,则隐藏工具栏的同时,还要让下拉头部跟着往下滑动; 5、下拉刷新过程松开手势

    2.9K40

    Android Studio System Trace 的新增功能

    不同于函数跟踪, Java Method 或 C/C++ Func Trace,System Trace 跟踪的是系统级的内容,设备活动 (例如 CPU 核心调度) 和 Android 系统进程 (...框选、拖放与缩放 分析面板 说到分析,我们想着重聊一聊 Android Studio 4.0 引入的新  Analysis Panel ,它位于  Profiler 窗口的右边一列。...作为补充,我们在 Android Studio 4.1 Canary 10 添加了  Summary  选项卡,用于展示线程状态分布、跟踪事件统计等信息。...举例来说,我们经常需要深入了解一个反复出现的跟踪事件。Summary 选项卡会显示基本的统计信息 (计数,最小值,最大值等) 以及所选跟踪事件运行时间最长的一次事件。...统计信息以及跟踪事件运行时间最长的事件 稳定性与性能改进 最后但也同样重要的是,我们还改进了 CPU 记录的性能和稳定性: 我们修复了一些可能导致记录失败的 Bug; 我们从 Android API

    2.7K50

    RecyclerView必知必会

    基本概念 RecyclerView是Android 5.0提出的新UI控件,位于support-v7包,可以通过在build.gradle添加compile 'com.android.support...通过“android:divider”设置自定义分割线。 setOnItemClickListener()和setOnItemLongClickListener()设置点击事件和长按事件。...RecyclerView局部刷新的实现原理也是基于RecyclerView的回收机制,即能直接复用的ViewHolder就不调用onBindViewHolder()。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,在之前,一旦子View处理了触摸事件,父View就没有机会再处理这次的触摸事件嵌套滑动机制解决了这个问题,能够实现如下效果: 为了支持嵌套滑动...回顾 回顾整篇文章,发现我们已经实现了RecyclerView的很多扩展功能,包括:打造万能适配器、添加Item事件、添加头视图和尾视图、设置空布局、侧滑拖拽。

    4.7K20

    Flutter区别于其他技术的关键是什么?

    Flutter采用自带的Native渲染引擎渲染视图,它是自己完成了组件渲染的闭环;RN、Weex之类的框架,只是通过JavaScript虚拟机扩展调用系统组件,最后是由Android或者iOS系统来完成组件的渲染...水平扫描时,显示器会发出一个水平同步信号(HSync);当一帧画面绘制完成之后,电子枪恢复原位,准备下一次扫描之前,显示器会发出一个垂直同步信号(Vsync),显示器以固定的频率刷新,这个刷新率就是Vsync...Dart避免了抢占式调度和共享内存,可以在没有锁的情况下进行对象分配和垃圾回收,在性能方面表现相当不错。...Engine层的作用,则是将他们组合起来,从他们生成的数据实现视图渲染。 Framework层则是一个用Dart实现的UI SDK,包含了动画、图形绘制和手势识别等功能。...ScrollView滚动的时候需要刷新视图内容,从而触发内容重绘。当滚动内容重绘时,一般情况下其他内容是不需要重绘的,这时候重绘边界就派上用场了。

    2.7K30

    RecyclerView 必知必会

    基本概念 RecyclerView是Android 5.0提出的新UI控件,位于support-v7包,可以通过在build.gradle添加compile 'com.android.support...通过“android:divider”设置自定义分割线。 setOnItemClickListener()和setOnItemLongClickListener()设置点击事件和长按事件。...RecyclerView局部刷新的实现原理也是基于RecyclerView的回收机制,即能直接复用的ViewHolder就不调用onBindViewHolder()。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,在之前,一旦子View处理了触摸事件,父View就没有机会再处理这次的触摸事件嵌套滑动机制解决了这个问题,能够实现如下效果: ?...回顾 回顾整篇文章,发现我们已经实现了RecyclerView的很多扩展功能,包括:打造万能适配器、添加Item事件、添加头视图和尾视图、设置空布局、侧滑拖拽。

    4.2K90

    RecyclerView 必知必会

    通过”android:divider”设置自定义分割线。 setOnItemClickListener()和setOnItemLongClickListener()设置点击事件和长按事件。...RecyclerView的回收机制有个重要的概念,即将回收站分为Scrap Heap和Recycle Pool,其中Scrap Heap的元素可以被直接复用,不需要调用onBindViewHolder...RecyclerView局部刷新的实现原理也是基于RecyclerView的回收机制,即能直接复用的ViewHolder就不调用onBindViewHolder()。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,在之前,一旦子View处理了触摸事件,父View就没有机会再处理这次的触摸事件嵌套滑动机制解决了这个问题,能够实现如下效果: ?...回顾 回顾整篇文章,发现我们已经实现了RecyclerView的很多扩展功能,包括:打造万能适配器、添加Item事件、添加头视图和尾视图、设置空布局、侧滑拖拽。

    2.6K70

    Android开发笔记(七十五)内存泄漏的处理

    因为C/C++设计上的原因,手工分配的内存,也要手工来释放,malloc/free是C中分配/释放内存的运算符,new/delete则是C++中新增的分配/释放内存的运算符。...情况之一是调用了非java接口,比如调用了jni接口,jniC/C++的内存就要手工回收;情况之二是调用了外部服务,使用完毕就得手工通知外部服务去回收;情况之三是异步处理,实时的内存回收显然顾不上异步处理的任务...内存泄漏的场景 在Android开发,内存泄漏可能发生在如下几个场景: 1、查询操作后,没有关闭游标Cursor; 2、刷新适配器Adapter时,没有重用convertView对象; 3、...适配器的相关介绍参见《Android开发笔记(三十八)列表类视图》。...TelephonyManager的listen方法,便是用来向系统的电话服务注册各种手机事件。手机相关事件的说明参见《Android开发笔记(四十六)手机相关事件》,这里就不罗唆了。

    1.1K20

    Android RecyclerView使用简述

    使用 ① Activity使用DataBinding ② item布局 ③ 适配器 ④ 添加item点击和长按事件 五、RecyclerView下拉刷新和上拉加载 ① 添加依赖库 ② 下拉刷新数据 ③...点击Finish完成项目创建,然后等待项目构建完成,在之前的AndroidRecyclerView是需要引入依赖库的,会有v4,v7版本的库,现在都迁移到androidx下了,目前在项目构建的时候也会自动添加这个...五、RecyclerView下拉刷新和上拉加载   在日常使用,RecyclerView的数据并不是一次性都加载出来的,会有分页,重新加载等操作,手机上操作就是下拉刷新和上拉加载。...① 添加依赖库 下拉刷新的动作可以由一个库来完成,在app的build.gradledependencies{}闭包添加如下依赖: implementation 'androidx.swiperefreshlayout...>   这里的代码也很简单,通过一个SwipeRefreshLayout包裹住RecyclerView,这个控件可以感知下拉的动作,下面我们来完成下拉刷新

    2.4K21

    flutter跨平台原理

    4.修改了main函数创建的根控件节点,Flutter在热刷新后只会根据原来的根节点重新创建控件树,不会修改根节点。...4.多生代无锁垃圾回收器,专门为UI框架中常见的大量Widgets对象创建和销毁优化。 5.跨平台,iOS和Android共用一套代码。...Dart的垃圾回收也采用了多生代算法,新生代在回收内存时采用了“半空间”算法,触发垃圾回收时Dart会将当前半空间中的“活跃”对象拷贝到备用空间,然后整体释放当前空间的所有内存: 整个过程Dart...整个过程,位置信息由父节点来控制,子节点并不关心自己所在的位置,父节点也不关心子节点具体长什么样子。...由于只是修改了颜色属性,所以 Element 和 RenderObject 都被重用,之前的控件树会被释放回收。 那么如果把红色圆形变成三角形又会怎样呢?

    1.9K30

    探究 css touch-action 属性

    See 这样的bug 然后找了一通发现可以用 *{touch-action:none}这个方法 用法是禁用元素(及其不可滚动的后代)上的所有手势,以使用自己提供的拖放和缩放行为(地图或游戏表面...使用 Touch_events 的应用程序通过调用 preventDefault() 禁用浏览器处理手势,但也应使用触摸操作确保浏览器在调用任何事件侦听器之前,了解应用程序的意图。...值 auto 当触控事件生在元素上时,不进行任何操作。 none 当触控事件生在元素上时,不进行任何操作 pan-x 启用单指水平平移手势。...启用平移和缩小缩放手势,但禁用其他非标准手势,例如双击以进行缩放。 禁用双击可缩放功能可减少浏览器在用户点击屏幕时延迟生成点击事件的需要。...示例 最常见的用法是禁用元素(及其不可滚动的后代)上的所有手势,以使用自己提供的拖放和缩放行为(地图或游戏表面) #map { touch-action: none; } 另一种常见的模式是使用指针事件处理水平平移的图像轮播

    1.8K10

    ASP.NET ViewState之详解

    在各个回之间保存值,不将这些值存储在会话状态或用户配置文件,将信息存储在视图状态,这样在下次将该页发送到服务器时,代码便可以在页加载事件过程访问这些信息。...所谓回:就是由服务器控件导致的页面刷新。 ASP.NET 页框架使用视图状态在往返过程之间保存页和控件值。...的值,然后在下一次的回事件,DropDownList的值就会是通过Button事件修改过的值,不是初始值。...EnableViewState为false就是禁用ViewState。 2.Button1_Click事件 ? ? 3.点击刷新按钮,触动回 ?...相信大家看到这里可以理解了,第一个Label的值是通过Button1_Click事件改变过后的值,第二个Label的值则是初始值,因为第二个Label禁用了ViewState。

    1.5K30
    领券