初识kotlin,实现一个简单的列表

来源:互联网 发布:网络动作游戏排行榜 编辑:程序博客网 时间:2024/05/29 02:21

开场小絮叨:


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.beanclass 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.adapterimport android.content.Contextimport android.widget.BaseAdapterabstract 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.adapterimport android.content.Contextimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.TextViewimport com.demo.bean.Personimport com.zhangs.demo.firstkotlin.Rclass 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.kotlinimport android.os.Bundleimport android.support.v7.app.AppCompatActivityimport android.widget.ListViewimport android.widget.Toastimport com.demo.adapter.MyAdapterimport com.demo.bean.Personimport com.zhangs.demo.firstkotlin.Rclass 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代码风格写的,假如有什么地方不合适的,希望斧正。

原创粉丝点击