Kotlin(7)Activity

kotlin(七)Activity

一.基本使用

先对比kotlin和java中跳转到另一个activity的基本代码:

java:
Intent i = new Intent(OneActivity.this, TwoActivity.class);
startActivity(i);

kotlin:
val i = new Intent(this@OneActivity, TwoActivity::class.java)
startActivity(i)

可能你会觉得kotlin在写法上并没有更简洁,但在引入Anko库之后这两句代码就大大简化了,Anko库的引入在第一篇就提到过了:

startActivity()

如果需要传递数据过去,就可以类似于map映射的写法来传递数据:

startActivity(
    "year" to  "2018"
    "month" to "08"
    "day" to "12"
)
或者
startActivity(
    Pair("year", "2018")
    Pair("month", "08")
    Pair("day", "12")
)

无论是哪一种方式,在TwoActivity中数据的解析都是要先获取到Bundle对象:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_one)
        
    val bundle = intent.extras
    var year = bundle.getString("year")
    var month = bundle.getString("month")
    var day = bundle.getString("day")
}

如果说要指定activity的启动方式,我们可以在AndroidManifest.xml文件中对activity进行配置,或者在代码中来指定:

var i = intentFor(
    Pair("year", "2018")
    Pair("month", "08")
    Pair("day", "12")
)
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(i)
或者:
var i = intentFor(
    Pair("year", "2018")
    Pair("month", "08")
    Pair("day", "12")
)
startActivity(i.newTask())
//newTask()等同于在AndroidManifest.xml文件中的standard
//singleTop()等同于singleTop
//clearTop()等同于singleTask
//noHistory()类似于standard,但栈中不会保存新启动的activity实例
//clearTask()等同于singleInstance

二.处理返回数据

有时候我们需要在上一个界面接收下一个界面返回的数据,kotlin和java一样都会调用startActivityForResult方法来启动跳转:

OneActivity:
startActivityForResult(101, "year" to "2011", "month" to "09")

TwoActivity:
val intent = Intent()
intent.putString("end", "已接收")
setResult(Activity.RESULT_OK, intent)

第一个参数是requestCode,后面的参数是任意数量的需要被传递的数据键值对,TwoActivity中接收到数据后调用setResult方法将"已接收"返回给OneActivity。然后就是复写OneActivity中的onActivityResult方法来处理这个返回的数据:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode == RESULT_OK) {
        if (requestCode == 101 && data != null) {
            tv_hello.text = data.extras.getString("end")
        }
    }
}

 

你可能感兴趣的:(android)