• 1插件安装
  • 2配置kotlin
    • 根目录下buildgradle
    • app下的buildgradle
  • 3运行程序
  • 4其他小技巧
    • 实现OnClickListener接口
    • 实现网络请求
    • onActivityResult回调
    • Kotlin数值对象
    • 实体类javaBean
    • RecyclerView适配器
  • 5参考文章

1、插件安装

File –> Setting –> Plugins –> Install JetBrains Plugins –> 搜索找到Kotlin并安装

安装完成后重启AS。

此时再新建类时就会多出两个选项。

2、配置kotlin

根目录下build.gradle

        buildscript {            ext.kotlin_version='1.0.6'            repositories {                jcenter()            }            dependencies {                 // kotlin配置                classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"                classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"            }        }

这里有一个注意点:就是classpath的值,因为我们使用了kotlin_version这个变量,所以不能使用单引号括起来,一定得使用双引号。

app下的build.gradle

// kotlin插件apply plugin: 'kotlin-android'apply plugin: 'kotlin-android-extensions'ext.anko_version = '0.8.2' sourceSets {  main.java.srcDirs += 'src/main/kotlin'//main目录下建立kotlin专用文件夹  }
dependencies{...compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"compile "org.jetbrains.anko:anko-sdk15:$anko_version"compile "org.jetbrains.anko:anko-support-v4:$anko_version"}

后来发现第一行的gradle依赖的作用在于intent的地方,如下代码

 val intent = Intent(this,SelectPhotoActivity::class.java) startActivity(intent,)

这里的 .java,如果不加stdlib依赖,这里就一直报错,找不到 .java

3、运行程序

在kotlin文件夹下添加了和java下一样的package,然后在配置文件中把启动activity改成RunActivity

package com.xmliu.itravelimport android.os.Bundleimport android.support.v7.app.AppCompatActivityimport kotlinx.android.synthetic.main.activity_run.*class RunActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_run)        runTV.text = "我是一个跑者"        runTV.OnClick { toast(this,"敢点我,你完蛋了") }    }}

最终运行结果,如图所示

4、其他小技巧

实现OnClickListener接口

class KotlinAboutActivity : Activity() , View.OnClickListener{     override fun onClick(view: View?) {          when (view?.id) {        R.id.aboutus_new_layout -> startActivity(Intent(this@KotlinAboutActivity, KotlinVersionHtmlActivity::class.java)) ... ...            }     }      override fun onCreate(savedInstanceState: Bundle?) {            super.onCreate(savedInstanceState)            setContentView(R.layout.activity_about)            aboutus_new_layout.setOnClickListener(this)      }}

使用this@KotlinAboutActivity 确认指向目标
lambda表达式,当就一个参数时,可以省略,用内部的it代替;当参数不使用时,可以用下划线_取代

实现网络请求

val result = URL("").readText()

以上一行代码在java里要写成以下一大段

public String getHttpStringWithGet(String urlStr) {        StringBuffer sb = new StringBuffer();        String line;        BufferedReader buffer = null;        try {            URL url = new URL(urlStr);            HttpURLConnection urlConn = (HttpURLConnection) url                    .openConnection();            urlConn.setRequestMethod("GET");            urlConn.setUseCaches(false);            urlConn.setConnectTimeout(5000);            urlConn.setReadTimeout(50000);            urlConn.connect();            buffer = new BufferedReader(new InputStreamReader(                    urlConn.getInputStream()));            while ((line = buffer.readLine()) != null) {                sb.append(line);            }        } catch (Exception e) {            e.printStackTrace();            Log.i("TAG", e.getMessage());            JSONObject obj = new JSONObject();            try {                obj.put("success", "false");                obj.put("reason", "无法连接到服务器");            } catch (JSONException e1) {                e1.printStackTrace();            }            return obj.toString();        } finally {            try {                if (buffer != null)                    buffer.close();            } catch (IOException e) {                e.printStackTrace();            }        }        return sb.toString();    }

onActivityResult回调

   在onActivityResult回调方法中,一定要注意把Intent的参数值添加?,这意味着该值可以为空,不然在用户取消操作时,程序会崩溃;同理于适配器adapter的convertView也需要加上问号

Kotlin数值对象

如下表格

类型 长度
Double 64
Float 32
Long 64
Int 32
Short 16
Byte 8

实体类javaBean

data class User(val name: String, val age: Int)

RecyclerView适配器

这是借助了封装好的基类BaseRecycerAdapter,里面封装好了点击事件

    class CalendarAdapter(context: Context, list: List<*>) : BaseKotlinRecyclerViewAdapter(context, list) {        override fun onCreateViewLayoutID(viewType: Int): Int {            return R.layout.item_travel_calendar_list        }        override fun onBindViewHolder(holder: RecyclerHolder, position: Int) {            val item = list[position] as NoteBean            holder.convertView.calendar_item_content.text = item.content        }    }

如果不借助的话,就像下面这样,参考这里

class MainAdapter(var context: Context, var data: Array<String>) : RecyclerView.Adapter<MainAdapter.MyViewHolder>() {      override fun getItemCount(): Int {           return data.size      }      override fun onBindViewHolder(holder: MyViewHolder, position: Int) {          holder.itemView.tv_title.text = "标题:"          holder.itemView.tv_content.text = data[position]      }      override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MyViewHolder {          return MyViewHolder(LayoutInflater.from(context).inflate(R.layout.listitem_main, parent, false))      }      class MyViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView)  }  

5、参考文章

  1. Kotlin官网 http://kotlinlang.org/
  2. Kotlin官方博客 https://blog.jetbrains.com/kotlin/
  3. GitHub官方链接 https://github.com/JetBrains/kotlin
  4. Kotlin在线编辑器 https://try.kotlinlang.org
  5. 国内为数不多的关于Kotlin的视频讲解 https://github.com/enbandari/Kotlin-Tutorials

更多相关文章

  1. android studio使用Lambda表达式的正确姿势
  2. Android(安卓)Studio的插件开发
  3. 盘点android中常见的设计模式(九) -- Adapter/适配器模式
  4. 关于做Android+J2ee系统集成开发的一点心得【转】
  5. Android(安卓)进阶——上传Java项目及Android(安卓)AAR至JCenter
  6. Android(安卓)7.0动态权限大总结
  7. Android实现二维码扫描功能(一)-ZXing插件接入
  8. Android(安卓)Studio 翻译插件Translation和strings.xml多语言文
  9. Android中插件开发篇之----类加载器

随机推荐

  1. 深度解析MySQL 5.7之临时表空间
  2. MySQL 使用 SSL 连接配置详解
  3. 深度解析MySQL 5.7之中文全文检索
  4. mysql5.7安装教程(windows)
  5. 详解如何使用DockerHub官方的MySQL镜像
  6. mysql缓冲和缓存设置详解
  7. C#如何在海量数据下的高效读取写入MySQL
  8. MySQL存储引擎中MyISAM和InnoDB区别详解
  9. SQL Server2019数据库备份与还原脚本(批
  10. SQL中的三种去重方法小结