初識kotlin,實現一個簡單的列表


開場小絮叨:


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代碼風格寫的,假如有什麼地方不合適的,希望斧正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章