Kotlin简单使用EventBus3.x

Stella981
• 阅读 345

我的博客原文地址:Kotlin简单使用EventBus3.x
完成功能:替换activity间传值的繁琐过程

使用到的 Kotlin 语法

我也是现学现用的,写的不对,多多指教

AS版本:2.3

EventBus版本:3.1.1

  • Kotlin 环境

这个网上很多讲解了,我也是看着别人的博客搭建的。就装一个 Kotlin 插件,然后导入 EventBus3 ,导入步骤看 Github 介绍。

这里需要注意不能在 onStar 方法中注册,Github 中的介绍是在 onStart 方法中注册,但是我用 Kotlin 和 Java 都试过了,会内存溢出,具体原因还没查明,了解的望告知,谢谢!

  • 变量赋值

val txt:String? = "EventBus1",不管是字符串还是整型数据,都用 val去声明一个变量;txt:String是变量名字和变量的类型,中间通过:号隔开,利用?去做非空操作,就是这个值不会为NULL。=号后面就是赋值的内容了。

  • 点击事件

     bt_message.setOnClickListener{
         startActivity(Intent(this, EventBus2Activity::class.java))
     }
    

bt_message 是 xml 中的布局 id ,在 Moudle 的 build.gradle 文件中引入apply plugin: 'kotlin-android-extensions',这个引入过程网上也讲解的很清楚了,引入之后就可以直接用id去设置内容,省去了 Java 中的 findViewById 操作。

点击事件比Java的简洁了太多太多…Kotlin 中是创建对象是没有 new 的

创建类、方法

  • 创建类

    class EventBusMessages {
        var message:String? = null
    } 
    
  • 创建方法(这里直接引用代码中所创建的方法了)

    fun onEvent(messageEvent: EventBusMessages) { /** * 注意传递的参数 * 如果传递的是对象,这里也要传入对象 * 如果传递的是字符串,这里要传入String * 以此类推... */ event_bus1_tv.setText(messageEvent.message) }

创建类:直接用class去定义,加上类名即可

创建方法:用 fun 去定义,加上方法名即可,想加参数在括号中声明即可,声明方式是:对象:类型

  • Java 中 get/set 的替代方式

也不能说替代,Java 中也有这种方式。Kotlin 的实现相当于Java 中给属性设置为public,然后通过创建出的对象去完成赋值操作

  • 定义一个对象

    class EventBusMessages {
        var message:String? = null
    }
    
  • 赋值

     val eventMessage = EventBusMessages()
     eventMessage.message = "你好"
     val msg = eventMessage.message
    

Kotlin 使用EventBus3.x

终于说到正事了,说这么多。kotlin 使用 EventBus 和 Java 是一毛一样的,感觉说了好多废话,直接上代码吧!

注册EventBus,必须在OnCreate(Java也是)

源码地址

代码主要在event_bus包中,代码很乱,待完善。

GitHub

本文同步分享在 博客“_龙衣”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
光头强的博客 光头强的博客
2个月前
Java面向对象试题
1、 请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。 创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现 接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿 吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
2个月前
css问题
1、 在IOS中图片不显示(给图片加了圆角或者img没有父级) <div<img src""/</div div {width: 20px; height: 20px; borderradius: 20px; overflow: h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
晴空闲云 晴空闲云
2个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。 盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
1个月前
快速入门|使用MemFire Cloud构建React Native应用程序
> MemFire Cloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Wesley13 Wesley13
1年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表: **时辰** **时间** **24时制** 子时 深夜 11:00 - 凌晨 01:00 23:00 - 01 :00 丑时 上午 01:00 - 上午 03:00 01:00 - 03 :00 寅时 上午 03:00 - 上午 0
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序 select * from table_name order id desc; 2.按照指定(多个)字段排序 select * from table_name order id desc,status desc; 3.按照指定字段和规则排序 selec
Wesley13 Wesley13
1年前
PHP中的NOW()函数
是否有一个PHP函数以与MySQL函数`NOW()`相同的格式返回日期和时间? 我知道如何使用`date()`做到这一点,但是我问是否有一个仅用于此的函数。 例如,返回: 2009-12-01 00:00:00 * * * ### #1楼 使用此功能: function getDatetimeNow() {
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
#### 背景描述 # Time: 2019-01-24T00:08:14.705724+08:00 # User@Host: **[**] @ [**] Id: ** # Schema: sentrymeta Last_errno: 0 Killed: 0 # Query_time: 0.315758 Lock_
helloworld_28799839 helloworld_28799839
2个月前
常用知识整理
# Javascript ## 判断对象是否为空 ```js Object.keys(myObject).length === 0 ``` ## 经常使用的三元运算 > 我们经常遇到处理表格列状态字段如 `status` 的时候可以用到 ``` vue