您的位置:首页 > 编程语言

在项目中逐步加入Kotlin代码 -> 基本点击事件与跳转

2018-03-05 15:19 281 查看

在项目中逐步加入Kotlin代码

-> 初衷:

学习Kotlin有一段时间了,想逐步运用到项目中去

在项目逐步加入的时候,发现了很多以前自己没有注意到的细节导致开发受阻

多练习,加深印象

将自己Kotlin的历程记录下来给同样遇到问题的同学参考

最重要的一个问题是,在自己遇到坑的时候,查看别人的博客,基本都是复制粘贴抄袭别人的博客,最恶心的是,抄袭的博客没有写具体,很多流程都没有写完就草草了事,我实在不理解这样的博客价值何在

-> 基于此,我决定一边替换自己项目中的语言,并将细节,代码块写好,一边抽时间发布在博客中,给同样搜不到不一样的博客的同学做参考。

一.在Java开发的Android项目中集成Kotlin

1.安装插件

打开AS或IDEA

Setting

Plugins

搜索
Kotlin
(如果升级至AS 3.01则自带Kotlin)

安装好并重启



2.配置环境

打开项目中随便一个路径,右键新建一个Kotlin的Class文件





第一次创建Kotlin Activity,会提示 Kotlin not configured,点configure,在弹窗中,直接点击确定即可。AS自动会在Gradle中配置一些依赖

配置完成

接下来,我们看看gradle发生了哪些变化:

打开module中的gradle,发现顶部多了一行代码:

buildscript {
ext.kotlin_version = '1.2.30' // new line
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // new line
}
}


这里申明了kotlin的版本号,并提供在其他地方引用

打开app中的gradle,顶部多了两行代码:
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
其中,第一个代表加入了kotlin支持android的插件,第二个是额外包,(其实此行代码是我自己手动加的,我们后面会讲到它的用法,真的好方便)

在dependencies大括号中,多了一行代码:
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.30"
这行代码就是kotlin的架包

好,如果发现没有编译通过,就手动将这些配置拷贝到对应的gradle下。

如果不出意外,项目的kotlin环境已经配置完成。

基本点击事件与跳转:

1.打开刚刚项目中新建的kotlin类,当前的类什么都没有,只申明了一个类:

package com.sby.seal.ui.aty.test
class Test2 {}


2.继承Activity,并举例实现OnClickListener的代码:

class Test2 : BaseActivity() , View.OnClickListener{}


没错,extend被:所替代了,代码看上去更简洁,用一个逗号隔开实现的接口,省去了implements关键词,其中BaseActivity是我项目中所有Activity的基类,大家可直接当做Activity来看,需要注意的是,这里的Activity后面需要加()才行

当前会报错,因为需要重写方法和实现接口,
alt + Enter
查看需要重写和实现的接口

重写Activity的Oncreate方法,并新建activity_test布局:

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test)
}


不出意外,程序就可以运行起来了。

修改布局,添加一个Button:

<Button
android:id="@+id/bt_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="button"  />


在kotlin类中,加入点击事件:

override fun onClick(v: View?) {
when (v?.id)
{
R.id.ll_push  -> startActivity(Intent(this,Activity0::class.java ))
R.id.ll_del -> startActivity(Intent(this,Activity1::class.java ))
R.id.ll_go_to_market -> openAsClient(mActivity, Constant.SPLASH_IMG_ACTION)
else -> xxx
}
}


有的小伙伴惊讶了,为什么不用findViewById就可以直接找到控件

好吧,让我轻轻地告诉你,打开module的gradle,顶部是不是有一句
apply plugin: 'kotlin-android-extensions'


没错,这是kotlin支持android开发的附加包的申明,这里提供了很多封装好的方法

再切换到kotlin的类,查看顶部导入的包,应该有一行这样的导入代码:

import kotlinx.android.synthetic.main.activity_test .*


看到了吧,控件不是凭空而来的,解放双手,抛弃findViewById直接使用控件吧

至此,点击事件就完成了.在我的测试中,布局中onClick的内容可以为任意字符串,在类中onClick方法中执行没有任何影响。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐