开场小絮叨:
kotlin被谷歌正式作为Android的一级开发语言已经好几个月了,一直想学习一下,一直没有时间(好吧,我承认是我懒)。最近买了本书啃,也算下定决心学习这门语言。学习新知识,首先你要知道它是什么它的历史和它的用途。它是针对Java平台的一种编程语言,在这我强调一下,kotlin并不是一门新的语言,它其实在11年就已经推出来了,只不过是在被谷歌认证为Android开发官方语言之后才被人们广泛流传。当然,也不要简单的认为它只能用来开发Android应用,它还可以用来开发服务端和其它的用武之地。对于这门语言,我只能说很强大,但是不会盲目追捧(好多文章已经把它捧上天了),适合自己的才是最好的。
学习一门语言,光看是不行的,还是得动手啊,毕竟实践是检验理论的唯一标准。作为程序员学习新语言的第一个程序都是hello world,但是你会感到兴奋吗,不会,因为这一步骤大多数IDE都会自动生成,其实和没写是一样的。所以今天我打算来实现一个简单的列表来体验一下kotlin。怎么配置环境我就不多说了,要么下载插件,要么下载最新版本的Android Studio。
首先我们先明确一下步骤
1.编写布局文件(很简单就一个ListView)
2.编写数据类(在这里我就用最常用的Person类吧 哈哈)
3.编写适配器
4.在Activity里面做一下处理(这里就简单的给ListView设置适配器和点击事件)
布局文件这和我们平常没什么区别就略过了,那么就从编写数据类开始吧
Person.kt
package com.demo.bean
class Person(name:String,age:Int,profile:String="这个人很懒还没有签名"){
var name:String=""
var age:Int=0
var profile:String?=null
init {
this.name=name
this.age=age
this.profile=profile
}
}
看到上面的和平常我们java写的数据类相比是不是简洁了好多,这是因为kotlin内部自己实现了默认的getter和setter,在通过对象访问属性的适合会默认调用getter和setter,当然我们也可以自定义,这里就不说了。接下来是适配器部分
BasicAdapter.kt(抽取出来的一个抽象类)
package com.demo.adapter import android.content.Context import android.widget.BaseAdapter abstract class BasicAdapter<T>(context: Context?,list:ArrayList<T>?): BaseAdapter() { var listData:ArrayList<T>?=null var context:Context?=null init { this.listData=list this.context=context } override fun getItem(p0: Int): T? { return listData?.get(p0) } override fun getItemId(p0: Int): Long { return p0.toLong() } override fun getCount(): Int { return listData?.size?:0 } /** * 获取数据集合 */ public fun getData():ArrayList<T>?{ return listData } /** * 移除某一项 */ public fun remove(position:Int){ listData?.removeAt(position) notifyDataSetChanged() } /** * 移除所有数据 */ public fun removeAll(){ listData?.clear() notifyDataSetChanged() } /** * 在某一个位置更新数据 */ public fun update(postion:Int,data:T){ listData?.add(postion,data) notifyDataSetChanged() } /** * 追加数据 */ public fun updateAllAppend(datas:ArrayList<T>){ listData?.addAll(datas) notifyDataSetChanged() } /** * 更新全部数据 */ public fun updateAll(datas: ArrayList<T>){ listData?.clear() listData?.addAll(datas) notifyDataSetChanged() } } MyAdapter.kt(具体实现类)
package com.demo.adapter import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import com.demo.bean.Person import com.zhangs.demo.firstkotlin.R class MyAdapter(context: Context?, list: ArrayList<Person>?) : BasicAdapter<Person>(context, list) { override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View { var contentview = p1 var holder: MyAdapter.ViewHolder? = null if (contentview == null) { contentview = LayoutInflater.from(context).inflate(R.layout.layout_item_list, null) var tv_userName: TextView = contentview.findViewById(R.id.tv_username) var tv_age: TextView = contentview.findViewById(R.id.tv_age) var tv_profile: TextView = contentview.findViewById(R.id.tv_profile) holder = MyAdapter.ViewHolder(tv_userName, tv_age, tv_profile) contentview.setTag(holder) } else { holder = contentview.getTag() as MyAdapter.ViewHolder? } holder?.userName?.setText(listData?.get(p0)?.name) holder?.age?.setText(listData?.get(p0)?.age.toString()) holder?.profile?.setText(listData?.get(p0)?.profile) return contentview!! } }
语法可能看着有点陌生,但是我相信你肯定能看懂,这不就是原来我们一直重复写过的listview优化部分吗接下来我们就在Acitivity里面稍微处理一下,让页面显示出一个列表吧
MainActivity.kt
package com.demo.kotlin import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.widget.ListView import android.widget.Toast import com.demo.adapter.MyAdapter import com.demo.bean.Person import com.zhangs.demo.firstkotlin.R class MainActivity : AppCompatActivity() { var mListView: ListView? = null var data: ArrayList<Person>? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mListView=findViewById(R.id.listview) initData() var adater= MyAdapter(this,data); mListView?.adapter=adater //设置item的点击事件 mListView?.setOnItemClickListener { adapterView, view, i, l -> Toast.makeText(this,data?.get(i)?.name,Toast.LENGTH_SHORT).show() } } /** * 初始化数据 */ public fun initData(): Unit { data = arrayListOf(Person("张三", 21, "哈哈哈哈哈"), Person("李四", 21, "嘻嘻嘻嘻嘻嘻嘻"), Person("王五", 21), Person("赵六", 21, "嘿嘿嘿嘿嘿嘿嘿嘿嘿"), Person("张三疯", 21, "哈哈哈哈哈"), Person("张三四", 21, "哈哈哈哈哈")) } }
那么我们就来运行一下吧,效果如下:
当然运行出效果不是最重要的,主要是通过这个简单的例子,来体验一下,kotlin和java的区别,当然我这个例子完全是按java代码风格写的,假如有什么地方不合适的,希望斧正。