kotlin實現Recyclerview,ListView列表

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鎮樓圖


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