kotlin Android篇

Activity跳转

传递配对字段数据        

val intent = Intent(this@MainActivity, Tinearlayoutactivity: :class.java)

startactivity(intent)

Kotlin代码与Java代码主要有两点不同之处:

(1)在类内部指代自身的this关键字,Java的完整写法是“类名.this”,而Kotlin的完整写法是“this@类名”,当然二者均可简写为“this”。

(2) 获取某个类的class 对象,Java的写法是“类名.class”,而Kotlin的写法是“类名::class.java”,一看便知带有浓浓的Java风味。

Anko库扩展函数的写法

startactivity<linearlayoutActivity>()

putExtra传数据

//第一种写法,参数名和参数值使用关键字to隔开

startActivity<ActsecondActivity>( request time" to DateutilnowTime, "request content" to et request.text.tostring())

注意到上面的写法使用关键字to隔开参数名和参数值,感觉不够美观,而且容易使人迷惑,to后面究竟要跟着字段名还是字段值呢? 所以Ako库提供了另一种符合习惯的写法,也就是利用Pair类把参数名和参数值进行配对,Pair的第一个参数为字段名,第二个参数为字段值。据此改写后的Kolin跳转代码如下所示:

//第二种写法,利用Pair把参数名和参数值进行配对

startnctivity<Actsecondactivity>(

        Pair("request time", Dateutil .nowrime),

        Pair("request content", et request .text.toString( )))

数据解析

无论哪种写法,在下一个活动中解析请求参数的方式都一样,都得先获取Bundle对象然后分别根据字段名称获取对应的字段值。解析请求参数的具体Kotlin代码如下所示:

//获得请求参数的包裹

val bundle = intent.extras

val request time = bundle.getstring( "request time")

val request content = bundlegetstring( "request content") 

传递序列化数据

序列化对象

序列化对象的改造相当简单,仅需在类名之前增加一行注解“@Parcelize”就好了,于是整个类的Kotlin代码只有下面寥寥几行:

//@Parcelize注解表示自动实现Parcelable接口的相关方法

@Parcelize data class MessageInfoval (content: String, val send_time: String) : Parcelable

不过若想正常编译,还需修改模块的编译文件build.gradle,在文件未尾添加下面几行表示增加对安卓插件的编译支持:

//@Parcelize标记需要设置experimental = true

androidextensions {

        experimental e true

}

传递序列化对象

编译文件修改完毕,现在能在Kotlin中使用序列化对象的注解了。虽然自定义的Messagelnfo类内部没有任何一行代码,但是它除了具备数据类的所有方法外,也自动实现了Parcelable接口的几个方法。接下来就可以利用该类传输活动跳转的序列化数据了,下面是改写后的

Kotlin跳转代码:

val request = MessageInfo(et request.text.toString(), Dateutil.nowTime) startActivity<ParcelableSecondActivity>( message" to request)

跳转后的下一个页面调用getParcelable即可正常获得原始的序列化数据,具体的数据解析Kotlin代码如下所示:

//获得Parcelable格式的请求参数

val request  = intent.extras.getParcelable<MessageInfo>("message")

跳转时指定启动模式

前面提到Anko库的startActivity方法取消了Intent意图对象,这个做法有利有弊,弊端是Intent对象还有其他的设置方法,比如setAction方法用来设置动作、setData方法用来设置路径、addCategory方法用来设置动作类别、setType方法用来设置数据类型、setFlags方法用来设置启动模式等。所以对于复杂一点的活动跳转,必须要保留Intent对象,为此Anko库额外提供了intentFor方法,用于简单生成Intent对象,其书写格式类似于startActivity方法,

举人例子:

val intent = intentForActSecondactivity>( request time" to Dateutil.nowTime , "request content" to et_request.text.tostring())

然后设置intent

处理返回数据

页面跳转的多数情况是上一个页面传递请求参数给下一个页面,当然也有少数情况是上一个页面需要接收下一个页面的返回数据。此时 Kotlin 跟Java一样都采取startActivityForResult方法,表示这次活动跳转要求处理返回信息,具体的Kotlin代码举例如下:
val info = MessageInfo(et request.text.tostring(), ateutil.nowTime)
//ForResult表示需要返回参数
startActivityForResult<ActResponseActivity>(0,"message" to info)


那么下一个页面返回应答参数的Kotlin代码也跟Java的做法类似,一样要调用setResult方法将应答参数返回给上一个页面:
val intent = Intent()
intent.putExtra("message", responsel
//调用setResult方法表示携带应答参数返回到上一个页面setResult(Activity.RESULT OK, intent )
finish()


上一个页面接收到了返回的应答数据,将它解包获得原始的字段信息,再做进一步的处理。上一个页面处理返回数据的Kotlin代码也类似。

Service服务启停

普通方式启动服务

跟启动Activity的方式类似,也有Anko的扩展函数可用

//第一种写法,参数名和参数值使用关键字to隔开

intentNormal = intentFor<NormalService>("request content" to et_request.text .tostring())

//第二种写法,利用Pair把参数名和参数值进行配对

intentNormal = intentFor<NormalService>(Pair("request content", et request .text.tostring( )))

startservice(lintentNormal)

//虽然Anko库集成了startservice的简化写法,但是一般不这么调用//因为服务启动之后是需要停止的,按Anko的简化写法会无法停止服务//除非无须在代码中停止该服务,才可以采用Anko的简化写法

startServices<NormalService>("request content" to et request.text.tostring())

绑定方式启动服务

跟java没多大区别,可以使用intentFor方式创建Intent

广播收发Broadcast

广播没什么特别的

ContentProvider

数据存储

sharedPreferences

Sqlite

文件I/O操作

多线程技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值