文章目录
效果图
最近买了郭霖郭大神的书——第一行代码,正在学习,学到了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))
}
}
}