Kotlin作爲google的親兒子已經有一段時間了,Kotlin的學習視乎都已經變成了每一個Android開發者必須具備的技能了,網絡上也出現了各種學習教程,通過網絡可以學系很多東西,這兩天才剛剛開始學習這門新語言,初識Kotlin,還是有很多的不習慣,語法,結構等等,不過感覺起來代碼量,確實要比java開發少些很多,各種空值得判斷,各種邏輯還是得好好慢慢研究研究。學習基礎語法就不多講,網絡教程有很多,可以慢慢去了解語法,習慣各種API,在沒有new對象的時候,種感覺少了點什麼。
下面是實現的RecyclerView的一個簡單例子,代碼幾乎都貼出來了,這個也只有自己多多的練習才能熟練,上代碼:
class ShowActivity : AppCompatActivity() {
//初始化,有add,remove方法的集合
var list=mutableListOf<String>()
//初始化必須賦值,只讀模式
var data= listOf(
"瓦洛蘭",
"德瑪西亞",
"班德爾城",
"諾克薩斯",
"祖安",
"瓦洛蘭",
"德瑪西亞",
"班德爾城",
"諾克薩斯",
"祖安")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_show)
initUI()
}
private fun initUI() {
val layoutManager=LinearLayoutManager(this)
// val layout=GridLayoutManager(this,2);
rv_list.layoutManager=layoutManager
var adapter=RvAdapter(data)
rv_list.adapter=adapter
sw_refresh.setOnRefreshListener {
sw_refresh.isRefreshing=false
}
}
}
在Activity裏面,其實和Java還是有相類似的東西,不過這種id就是View的寫法,還是挺NB的,看着舒服。
Adapter的寫法感覺變化要大一點,方法是一樣的,不過和以前的java習慣上還是有一定的變化的。
Adapter
class RvAdapter(var date : List<String>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder {
if(viewType==1){
val inflate = from(parent?.context).inflate(R.layout.item_layout, null)
return MyHolder(inflate)
}else{
val inflate = from(parent?.context).inflate(R.layout.item_layout, null)
return MyHolder2(inflate)
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
if(holder is MyHolder){
holder.bind(date[position])
}else if(holder is MyHolder2){
holder.bind(date[position])
}
}
override fun getItemCount(): Int {
return date.size
}
override fun getItemViewType(position: Int): Int {
when(position){
//多佈局
in 1..2 ->
return 1
else -> return super.getItemViewType(position)
}
}
class MyHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) {
fun bind(date: String){
itemView.tv_name.text=date
itemView.tv_class.text=date
itemView.tv_time.text=date
}
}
class MyHolder2(itemView: View?) : RecyclerView.ViewHolder(itemView) {
fun bind(date: String){
itemView.tv_content.text=date
itemView.tv_name.text=date
}
}
}
以上就是一個簡單的佈局,網絡請求還沒有加上,後期慢慢學習過程中要加上。下面是鎮樓圖:
下面是Listview的實現的adapter,activity和RecyclerView一樣,沒有太大的差別
class ListViewAdapter (var date : List<String>,var context: Context) : BaseAdapter() {
override fun getItem(p0: Int): Any {
return date.get(p0)
}
override fun getItemId(p0: Int): Long {
return 0
}
override fun getCount(): Int {
return date.size
}
override fun getView(position: Int, convertView: View?, p2: ViewGroup?): View {
var viewHolder:ViewHolder
var view: View
if (convertView == null) {
view = View.inflate(context,R.layout.item_layout, null);
viewHolder = ViewHolder(view)
view.tag = viewHolder
} else {
view = convertView
viewHolder = view.tag as ViewHolder
}
val item = getItem(position)
if (item is String) {
viewHolder.tv.text = item
viewHolder.tV_name.text = item
}
return view
}
class ViewHolder(viewItem: View) {
var tv: TextView = viewItem.findViewById(R.id.tv_content)
var tV_name: TextView = viewItem.findViewById(R.id.tv_name)
}
}
ListView鎮樓圖