5-VI--ListView事件全解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 零、前言[0.]本案例使用这篇的项目(你也可以用其他的):4-VI--ListView的封装支持多种条目 [1].条目点击事件[2].条目长按事件[3].

零、前言

[0.]本案例使用这篇的项目(你也可以用其他的):4-VI--ListView的封装支持多种条目
[1].条目点击事件
[2].条目长按事件
[3].滑动事件
[4].条目抢占交点问题

一、条目点击事件:setOnItemClickListener

几个参数----根据图片参照对应:
parent:背景变成淡绿色
view:背景变成随机颜色
position:弹出来
下面未点击的变色了,可见条目已正常复用

listview点击.gif
设置点击监听
 mLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            /**
             *
             * @param parent ListView
             * @param view 条目
             * @param position 位置
             * @param id id 测试Id和 position一样
             */
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.e(TAG, "onItemClick() called with:\n "
                        + "parent = [" + parent + "], \n" +
                        "view = [" + view + "],\n " +
                        "position = [" + position + "],\n" +
                        " id = [" + id + "]");
                parent.setBackgroundColor(0x5500ff00);
                view.setBackgroundColor(ColUtils.randomColor());
                ToastUtil.showAtOnce(ChatActivity.this, "当前位置:" + position);
            }
        });

一、条目长按事件:setOnItemLongClickListener

几个参数和点击一样
值得注意的一点是返回值:
true: 手指抬起时不触发条目的点击事件
false: 手指抬起时触发条目的点击事件

设置长按监听
mLv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        ToastUtil.showAtOnce(ChatActivity.this, "长按--当前位置:" + position);
        return true;
    }
});

三、滑动事件:setOnScrollListener

有两个回调方法:
onScrollStateChanged(AbsListView view, int scrollState)
onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)

1.onScrollStateChanged方法:view对象滑动时蓝色,滑动停止淡绿色
listview滑动.gif
 mLv.setOnScrollListener(new AbsListView.OnScrollListener() {
            /**
             *
             * @param view ListView
             * @param scrollState 上滑 1 滑动结束 0
             */
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                view.setBackgroundColor(scrollState == 0 ? 0x5500ff00 : 0x550000ff);
            }
            
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            }
        });
2.onScroll:android.widget.AbsListView.OnScrollListener#onScroll
/**
 *
 * @param view view ListView
 * @param firstVisibleItem 最顶端条目的id
 * @param visibleItemCount 可见的条目数
 * @param totalItemCount 总条目数
 */
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    mIsLastItem = visibleItemCount + firstVisibleItem == totalItemCount;
    mIsTopItem = firstVisibleItem == 0;
}
3.基于此实现监听滑到顶端和底端
滑动到上下端监听.gif
    /**
     * 是否滑到最底端
     */
    private boolean mIsLastItem;

    /**
     * 是否滑到最顶端
     */
    private boolean mIsTopItem;
        mLv.setOnScrollListener(new AbsListView.OnScrollListener() {

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                view.setBackgroundColor(scrollState == 0 ? 0x5500ff00 : 0x550000ff);
                if (scrollState == 0) {
                    if (mIsLastItem) {
                        ToastUtil.show(ChatActivity.this, "滑到最底端");
                    }
                    if (mIsTopItem) {
                        ToastUtil.show(ChatActivity.this, "滑到最顶端");
                    }
                }
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

                mIsLastItem = visibleItemCount + firstVisibleItem == totalItemCount;
                mIsTopItem = firstVisibleItem == 0;
            }
        });

四、条目抢占交点问题

只在一类布局上加上CheckBox,看图对比

交点抢占.gif
1.设置适配器的setData方法里可以获取条目内的布局:case 0:
CheckBox checkBox = (CheckBox) holder.getView(R.id.id_cb_left);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        ToastUtil.showAtOnce(ChatActivity.this,
                "状态改变为:"+(isChecked?"已选择":"未选中"));
    }
});
2.解决:让checkbox默认不抢焦点
checkBox.setFocusable(false);
抢占交点解决.gif

后记、

1.声明:

[1]本文由张风捷特烈原创,转载请注明
[2]欢迎广大编程爱好者共同交流
[3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
[4]你的喜欢与支持将是我最大的动力

2.连接传送门:

更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
简书首发,腾讯云+社区同步更新
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com

3.联系我

QQ:1981462002
邮箱:1981462002@qq.com
微信:zdl1994328

4.欢迎关注我的微信公众号,最新精彩文章,及时送达:
公众号.jpg
相关文章
|
7月前
|
存储 开发框架 开发者
QT C++焦点事件:多角度解析实用技巧与方法
QT C++焦点事件:多角度解析实用技巧与方法
1441 0
|
7月前
|
Java Android开发
Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
775 0
|
7月前
|
JavaScript 前端开发 C++
Javaweb之javascript事件的详细解析
1.6 JavaScript事件 1.6.1 事件介绍 如下图所示的百度注册页面,当我们用户输入完内容,百度可以自动的提示我们用户名已经存在还是可以使用。那么百度是怎么知道我们用户名输入完了呢?这就需要用到JavaScript中的事件了。
77 0
|
7月前
|
Web App开发 前端开发
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
238 0
|
3月前
|
传感器 C# Android开发
深度解析Uno Platform中的事件处理机制与交互设计艺术:从理论到实践的全方位指南,助您构建响应迅速、交互流畅的跨平台应用
Uno Platform 是一款开源框架,支持使用 C# 和 XAML 开发跨平台原生 UI 应用,兼容 Windows、iOS、Android 及 WebAssembly。本文将介绍 Uno Platform 中高效的事件处理方法,并通过示例代码展示交互设计的核心原则与实践技巧,帮助提升应用的用户体验。事件处理让应用能响应用户输入,如点击、触摸及传感器数据变化。通过 XAML 或 C# 添加事件处理器,可确保及时反馈用户操作。示例代码展示了一个按钮点击事件处理过程。此外,还可运用动画和过渡效果进一步增强应用交互性。
156 57
|
2月前
|
JavaScript API
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
168 0
|
3月前
|
图形学 开发者 UED
Unity游戏开发必备技巧:深度解析事件系统运用之道,从生命周期回调到自定义事件,打造高效逻辑与流畅交互的全方位指南
【8月更文挑战第31天】在游戏开发中,事件系统是连接游戏逻辑与用户交互的关键。Unity提供了多种机制处理事件,如MonoBehaviour生命周期回调、事件系统组件及自定义事件。本文介绍如何有效利用这些机制,包括创建自定义事件和使用Unity内置事件系统提升游戏体验。通过合理安排代码执行时机,如在Awake、Start等方法中初始化组件,以及使用委托和事件处理复杂逻辑,可以使游戏更加高效且逻辑清晰。掌握这些技巧有助于开发者更好地应对游戏开发挑战。
163 0
|
6月前
|
存储 Java API
Java中的CQRS和事件溯源模式解析
Java中的CQRS和事件溯源模式解析
|
设计模式 Go
Go语言事件系统设计解析:发布-订阅模式实战
Go语言事件系统设计解析:发布-订阅模式实战
493 0

推荐镜像

更多