kotlin是未来android开发的编程趋势,作为一条咸鱼,初学kotlin笔记
- 创建kotlin布局:(androidstudio3.0软件已经支持kotlin,3.0以下的需要安装kotlin插件,可自行百度安装)
2.初始化控件(非常方便,不需要findviewbyid,只需要直接使用地址引用,但是要确保地址的唯一性)
main_tv_hello.text = "nxm"
3.声明变量和初始化变量(需要到变量时可初始化,本处以初始化handler和thread为例子)
//声明变量
private lateinit var handler: Handler
private lateinit var myThread: Thread
//初始化变量
fun initData() {
//初始化myThread
myThread = object : Thread() {
override fun run() {
super.run()
handler.sendEmptyMessageDelayed(Constants.ZERO, 2000)
}
}
//初始化handler
handler = object : Handler() {
override fun handleMessage(msg: Message?) {
super.handleMessage(msg)
if (msg?.what == Constants.ZERO) {
var intent = Intent()
intent.setClass(this@Wellcome, MainActivity::class.java)
startActivity(intent)
}
}
}
}
4.0上面handler重写了handleMessage方法,里面有个跳转界面的方法(木子在查找了很多网上的this引用大多是说Wellcome@this,结果是错的正确写法是this@Wellcome)
//Intent页面跳转
var intent = Intent()
intent.setClass(this@Wellcome, MainActivity::class.java)
startActivity(intent)
5.0然后就是重写thread里面的run方法了
myThread = object : Thread() {
override fun run() {
super.run()
handler.sendEmptyMessageDelayed(Constants.ZERO, 2000)
}
6.0做一下Activity生命周期判断即可
override fun onResume() {
super.onResume()
if (!myThread.isAlive)
myThread.start()
}
override fun onStop() {
super.onStop()
//判断线程是否仍活着
if (myThread.isAlive) {
myThread.interrupt()
}
}
即实现kotlin android界面Activity之间的跳转(子线程延迟两秒跳转:其实可以不用在子线程中,为了学习而加进去的)
完整代码
package com.nxm.muzi102.activity
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.os.Message
import com.nxm.muzi102.R
import com.nxm.muzi102.comment.Constants
class Wellcome : BaseActivity() {
//声明变量
private lateinit var handler: Handler
private lateinit var myThread: Thread
override fun getContentView(): Int {
return R.layout.activity_wellcome
}
override fun onViewsDidLoad(savedInstanceState: Bundle?) {
initData()
}
fun initData() {
//初始化myThread
myThread = object : Thread() {
override fun run() {
super.run()
handler.sendEmptyMessageDelayed(Constants.ZERO, 2000)
}
}
//初始化handler
handler = object : Handler() {
override fun handleMessage(msg: Message?) {
super.handleMessage(msg)
if (msg?.what == Constants.ZERO) {
var intent = Intent()
intent.setClass(this@Wellcome, MainActivity::class.java)
startActivity(intent)
}
}
}
}
override fun onResume() {
super.onResume()
if (!myThread.isAlive)
myThread.start()
}
override fun onStop() {
super.onStop()
//判断线程是否仍活着
if (myThread.isAlive) {
myThread.interrupt()
}
}
}
跳转到的页面代码
package com.nxm.muzi102.activity
import android.os.Bundle
import com.nxm.muzi102.R
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : BaseActivity() {
override fun getContentView(): Int {
return R.layout.activity_main
}
override fun onViewsDidLoad(savedInstanceState: Bundle?) {
main_tv_hello.text = "nxm"
}
}
跳转到的页面布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.nxm.muzi102.activity.MainActivity">
<TextView
android:id="@+id/main_tv_hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>