1.在Android中,我们用java代码写activity跳转的时候代码如下:
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
startActivity(intent)
2.对应的kotlin代码如下:
val intent = Intent(this@MainActivity, OtherActivity::class.java)
startActivity(intent)
- 对比之下,这里的kotlin代码与java代码主要有两点不同之处 *:
- 在类内部指代自身的关键字,Java的完整写法是
类名.this
,而kotlin的完整写法是this@类名
,二者也都可以简写为this
- 获取某个类的
class
对象,Java
的写法是类名.class
,而kotlin
的写法是类名::class.java
,一看便知道带有很重的java风格
3.正宗的kotlin跳转写法如下:
startActivity<OtherActivity>()
究其原因,乃是Anko库利用kotlin的扩展函数给context
类新增类名为startActivity
的新方法,故而使用简化版的写法之前,必须先导入Anko
库的指定代码,即在kt文件头部添加下面一行导入语句:
import org.jetbrains.anko.startActivity
除此之外,还需要在模块的bugld.gradle
的deperdencies
节点中补充下述的anko-common包编译配置
compile "org.jetbrains.anko:anko-common:$anko_version"
4.intent
传递参数对比
- java代码如下:
Intent intent = new Intent(this,ActSecondActivity.class);
intent.putExtra("request_time",DateUtil.getNowTime());
intent.putExtra("request_content","这是请求内容");
startActivity(intent);
- 使用kotli结合anko的简化写法如下:
startActivity<ActSecondActivity>("request_time" to DateUtil.getNowTime(), "request_content" to "这是请求内容")
- 是不是很简洁,但是还是不太美观,再次进行修改代码方式如下
startActivity<ActSecondActivity>(Pair("request_time", DateUtil.getNowTime()),Pair("request_content" , "这是请求内容"))
实际上与上面写法一致