Android修行手册之Kotlin-点击事件篇

简介: 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)

有什么需要欢迎私我,交流群让学习不再孤单

👉前提

前面我们学了Kotlin语言,趁热打铁我们试试Kotlin在Android中的应用。

如果是新手,请先学完Android基础。

推荐先看小空之前写的熬夜Android系列,再来尝试。

👉实践过程

😜方式一

方法一就是单独的控件写自己的点击事件-匿名内部类形式

myBtn.setOnClickListener {
    Toast.makeText(this, "芝麻粒儿-点击了事件", Toast.LENGTH_SHORT).show()
}
复制代码

😜方式二

方法二就是实现View.OnClickListener接口,多个点击事件在同一个onClick中处理,Java中使用的是switch,Kotlin中使用when。

class MainActivity : AppCompatActivity(), View.OnClickListener {
    private val myText: TextView by lazy { findViewById<TextView>(R.id.myText) }
    private val myImg: ImageView by lazy { findViewById<ImageView>(R.id.myImg) }
    private val imageView: ImageView by lazy { findViewById<ImageView>(R.id.imageView) }
    private val myBtn: Button by lazy { findViewById<Button>(R.id.myBtn) }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        myText.setOnClickListener(this)
        myImg.setOnClickListener(this)
        myBtn.setOnClickListener(this)
        imageView.setOnClickListener {
           Toast.makeText(this, "芝麻粒儿-点击了事件", Toast.LENGTH_SHORT).show()
        }
    }
    override fun onClick(p0: View?) {
        when (p0?.id) {
            R.id.myText -> {
                Toast.makeText(this, "点击了文本", Toast.LENGTH_SHORT).show()
            }
            R.id.myImg -> {
                Toast.makeText(this, "点击了图片", Toast.LENGTH_SHORT).show()
            }
            R.id.myBtn -> {
                Toast.makeText(this, "点击了按钮", Toast.LENGTH_SHORT).show()
            }
        }
}
}
复制代码

😜方式三

方法三就是布局中使用【android:onClick】属性,类中直接创建同属性名的方法,但是根据实际情况来说,在项目中使用少,而且项目结构复杂了很容易混乱,所以不提这个了。

除了上述三种方式外,真实的业务可能会在点击事件增加一些保障:比如防止快速点击

复杂的业务逻辑,往往需要时间来处理,哪怕是1秒的时间,总会有着急或无聊的用户快速点击应用的按钮,如果没做好处理,必然会引发意想不到的事件,甚至是血崩。

所以年轻人呐,省事是需要付出代价的,你不做处理获取了片刻的自由,却得到了用户无尽的吐槽,这个道理,你明白了吗?

就拿上面点击事件方式一来举例,你运行后快速点击,你会发现即使你停止了点击,Toast还在不断的出现。

所以我们给她加个保障再来试试:

public abstract class NoFastClickListener implements View.OnClickListener {
    //最小快速点击间隔,距离上次间隔至少1000毫秒
    private final int MIN_CLICK_TIME = 1000;
    private long lastClickTime = 0;
    @Override
    public void onClick(View view) {
        long currentTime = Calendar.getInstance().getTimeInMillis();
        if (currentTime - lastClickTime > MIN_CLICK_TIME) {
            lastClickTime = currentTime;
            onNoFastClick(view);
        }
    }
    public abstract void onNoFastClick(View view);
}
复制代码

点击事件这样写:

myBtn.setOnClickListener(object : NoFastClickListener() {
    override fun onNoFastClick(view: View?) {
        Toast.makeText(this@MainActivity, "芝麻粒儿-防止点击了事件", Toast.LENGTH_SHORT).show()
    }
})
复制代码

运行后你再试试,会发现,哎?真的,没有那么多吐司了,真的好啊。

👉其他

📢作者:小空和小芝中的小空

📢转载说明-务必注明来源:

https://zhima.blog.csdn.net/

https://www.zhihu.com/people/zhimalier

https://juejin.cn/user/4265760844943479

📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

相关文章
|
2月前
|
Android开发 Kotlin
Android经典面试题之Kotlin的==和===有什么区别?
本文介绍了 Kotlin 中 `==` 和 `===` 操作符的区别:`==` 用于比较值是否相等,而 `===` 用于检查对象身份。对于基本类型,两者行为相似;对于对象引用,`==` 比较值相等性,`===` 检查引用是否指向同一实例。此外,还列举了其他常用比较操作符及其应用场景。
191 93
|
30天前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
28 1
|
1月前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
49 4
|
1月前
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
25 1
|
1月前
|
Android开发 Kotlin
Android面试题之Kotlin中如何实现串行和并行任务?
本文介绍了 Kotlin 中 `async` 和 `await` 在并发编程中的应用,包括并行与串行任务的处理方法。并通过示例代码展示了如何启动并收集异步任务的结果。
27 0
|
1月前
|
Java 调度 Android开发
Android面试题之Kotlin中async 和 await实现并发的原理和面试总结
本文首发于公众号“AntDream”,详细解析了Kotlin协程中`async`与`await`的原理及其非阻塞特性,并提供了相关面试题及答案。协程作为轻量级线程,由Kotlin运行时库管理,`async`用于启动协程并返回`Deferred`对象,`await`则用于等待该对象完成并获取结果。文章还探讨了协程与传统线程的区别,并展示了如何取消协程任务及正确释放资源。
27 0
|
2月前
|
安全 Android开发 开发者
探索安卓开发的未来:Kotlin的崛起与Flutter的挑战
在移动开发的广阔天地中,安卓平台始终占据着举足轻重的地位。随着技术的不断进步和开发者需求的多样化,Kotlin和Flutter成为了改变游戏规则的新玩家。本文将深入探讨Kotlin如何以其现代化的特性赢得开发者的青睐,以及Flutter凭借跨平台的能力如何挑战传统的安卓开发模式。通过实际案例分析,我们将揭示这两种技术如何塑造未来的安卓应用开发。
76 6
|
2月前
|
Android开发 开发者 Kotlin
告别AsyncTask:一招教你用Kotlin协程重构Android应用,流畅度飙升的秘密武器
【9月更文挑战第13天】随着Android应用复杂度的增加,有效管理异步任务成为关键。Kotlin协程提供了一种优雅的并发操作处理方式,使异步编程更简单直观。本文通过具体示例介绍如何使用Kotlin协程优化Android应用性能,包括网络数据加载和UI更新。首先需在`build.gradle`中添加coroutines依赖。接着,通过定义挂起函数执行网络请求,并在`ViewModel`中使用`viewModelScope`启动协程,结合`Dispatchers.Main`更新UI,避免内存泄漏。使用协程不仅简化代码,还提升了程序健壮性。
83 1
|
3月前
|
调度 Android开发 开发者
【颠覆传统!】Kotlin协程魔法:解锁Android应用极速体验,带你领略多线程优化的无限魅力!
【8月更文挑战第12天】多线程对现代Android应用至关重要,能显著提升性能与体验。本文探讨Kotlin中的高效多线程实践。首先,理解主线程(UI线程)的角色,避免阻塞它。Kotlin协程作为轻量级线程,简化异步编程。示例展示了如何使用`kotlinx.coroutines`库创建协程,执行后台任务而不影响UI。此外,通过协程与Retrofit结合,实现了网络数据的异步加载,并安全地更新UI。协程不仅提高代码可读性,还能确保程序高效运行,不阻塞主线程,是构建高性能Android应用的关键。
62 4
|
4月前
|
安全 Android开发 Kotlin
Android经典面试题之Kotlin延迟初始化的by lazy和lateinit有什么区别?
**Kotlin中的`by lazy`和`lateinit`都是延迟初始化技术。`by lazy`用于只读属性,线程安全,首次访问时初始化;`lateinit`用于可变属性,需手动初始化,非线程安全。`by lazy`支持线程安全模式选择,而`lateinit`适用于构造函数后初始化。选择依赖于属性特性和使用场景。**
156 5
Android经典面试题之Kotlin延迟初始化的by lazy和lateinit有什么区别?