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