Android Kotlin中ListView的實現————第一行代碼

效果圖

  最近買了郭霖郭大神的書——第一行代碼,正在學習,學到了kotlin中ListView的使用,特此記錄一下,效果如下:

在這裏插入圖片描述

例子下載

https://download.csdn.net/download/ljp345775/12450945

代碼實現
1. 首先編寫listView需要的item的佈局item.xml ,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="5dp">

    <ImageView
        android:id="@+id/iv_item_lv"
        android:layout_width="50dp"
        android:src="@drawable/apple_pic"
        android:layout_height="50dp" />

    <TextView
        android:id="@+id/tv_item_lv"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginStart="10dp"
        android:gravity="center_vertical"
        android:text="apple"
        android:textSize="20dp" />

</LinearLayout>

效果如下:
在這裏插入圖片描述

2. 編寫listview的適配器adapter,代碼如下:
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.TextView
import com.example.kotlindemo1.R
import com.example.kotlindemo1.beans.Fruit

/**
 * @作者: ljp
 * @時間: 2020/5/23 8:46
 * @描述:Listview 的 適配器
 **/
class ListAdapter(val context: Context, var data: List<Fruit>) : BaseAdapter() {

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        val vh: ViewHolder
        val view: View
        if (convertView == null) {
            view = LayoutInflater.from(context).inflate(R.layout.item1, parent, false);
            vh = ViewHolder(view)
            view.tag = vh
        } else {
            view = convertView
            vh = view.tag as ViewHolder
        }

        //填充數據
        var fruit = getItem(position)
        if (fruit != null) {
            vh.iv_item_lv.setImageResource(fruit.ImgId)
            vh.tv_item_lv.text = fruit.name
        }

        return view
    }

    inner class ViewHolder(v: View) {
        val tv_item_lv: TextView = v.findViewById(R.id.tv_item_lv)
        val iv_item_lv: ImageView = v.findViewById(R.id.iv_item_lv)
    }

    override fun getItem(position: Int): Fruit {
        return data.get(position)
    }

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    override fun getCount(): Int {
        return data.size
    }
}
3. 主界面中佈局代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.ListViewActivity">

    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>
4. activity中的代碼如下:
package com.example.kotlindemo1.activity

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.Toast
import com.example.kotlindemo1.R
import com.example.kotlindemo1.adapter.ListAdapter
import com.example.kotlindemo1.beans.Fruit
import kotlinx.android.synthetic.main.activity_listview.*

class ListViewActivity : AppCompatActivity(), AdapterView.OnItemClickListener,
    AdapterView.OnItemLongClickListener {

    private lateinit var adapter: ListAdapter
    private var data = ArrayList<Fruit>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_listview)
        supportActionBar?.title = "ListView"
        initData()
        adapter = ListAdapter(this, data)
        lv.adapter = adapter
        /**
         * 這是一種寫法,還有下面一種寫法
         */
//        lv.setOnItemClickListener { parent, view, position, id ->
//            Toast.makeText(
//                this,
//                "你點擊了->" + data[position].name,
//                Toast.LENGTH_SHORT
//            ).show()
//        }
//        //注意 item LongClick事件,有返回值
//        lv.setOnItemLongClickListener { parent, view, position, id ->
//            Toast.makeText(
//                this,
//                "你長按了->" + data[position].name,
//                Toast.LENGTH_SHORT
//            ).show()
//            true
//        }

        lv.setOnItemClickListener(this)
        lv.setOnItemLongClickListener(this)
    }

    //list view的item的點擊事件
    override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { 
        Toast.makeText(this,"你點擊了->" + data[position].name, Toast.LENGTH_SHORT).show()
    }

    //listview的item 的長按時間
    override fun onItemLongClick(parent: AdapterView<*>?,view: View?, position: Int,id: Long ): Boolean {
        Toast.makeText(this,"你長按了->" + data[position].name,Toast.LENGTH_SHORT).show()
        return true
    }

    private fun initData() {
        repeat(2) {
            data.add(Fruit("apple", R.drawable.apple_pic))
            data.add(Fruit("banana", R.drawable.banana_pic))
            data.add(Fruit("orange", R.drawable.orange_pic))
            data.add(Fruit("watermelon", R.drawable.watermelon_pic))
            data.add(Fruit("pear", R.drawable.pear_pic))
            data.add(Fruit("grape", R.drawable.grape_pic))
            data.add(Fruit("pineapple", R.drawable.pineapple_pic))
            data.add(Fruit("strawberry", R.drawable.strawberry_pic))
            data.add(Fruit("cherry", R.drawable.cherry_pic))
            data.add(Fruit("mango", R.drawable.mango_pic))
        }
    }
}


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