kotlin实现简单的listview
前言
今天上Android课的时候老师讲到了使用Java继承BaseAdapter的方式实现基本的listview,于是我突发奇想,使用kotlin编写了一个同样的listview,特此记录
代码实现
布局代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".MainActivity">
<LinearLayout
android:id="@+id/top"
android:layout_width="800px"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:text="姓名"
android:textSize="24sp"
android:gravity="center"/>
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="年龄"
android:textSize="24sp"
android:gravity="center"/>
<TextView
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:text="班级"
android:textSize="24sp"
android:gravity="center"/>
</LinearLayout>
<ListView
android:id="@+id/listView"
android:layout_below="@+id/top"
android:layout_width="800px"
android:layout_height="match_parent"/>
</RelativeLayout>
listview的子项布局代码
<?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="match_parent">
<TextView
android:id="@+id/name"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:text="姓名"
android:textSize="24sp"
android:gravity="center"/>
<TextView
android:id="@+id/age"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="班级"
android:textSize="24sp"
android:gravity="center"/>
<TextView
android:id="@+id/classview"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:text="学号"
android:textSize="24sp"
android:gravity="center"/>
</LinearLayout>
activitymain代码
package com.example.yyr_listview
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
var list:ArrayList<Fruit> ?= ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initFruits()
listView.adapter = MyAdapter(this,list!!)
}
private fun initFruits(){
for (i in 1..100 step 1){
val name = "张三${i}"
val age = "${i}"
val classView = (0..100).random().toString()
list?.add(Fruit(name,age,classView))
}
}
}
实体类代码
package com.example.yyr_listview
/**
*@创建者: yuyiran
*@创建日期: 2020-5-22 16:24
*@描述:
*/
class Fruit(val name:String,val age:String,val classview:String) {
}
适配器代码
package com.example.yyr_listview
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
/**
*@创建者: yuyiran
*@创建日期: 2020-5-22 14:33
*@描述:
*/
class MyAdapter(var context: Context,var datas:ArrayList<Fruit>) : BaseAdapter() {
inner class MyHolder(){
lateinit var name :TextView
lateinit var age :TextView
lateinit var classview:TextView
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
//获取没一行Item的显示内容。
var view:View ?= null
var myHolder:MyHolder ?= null
if(convertView == null){
myHolder = MyHolder()
view = LayoutInflater.from(context).inflate(R.layout.list_item,null)
//这里的R.layout.list_item要选择你定义的Listview的子项布局
myHolder.name = view.findViewById(R.id.name)
myHolder.age = view.findViewById(R.id.age)
myHolder.classview = view.findViewById(R.id.classview)
view.tag = myHolder
}else{
view = convertView
myHolder = view.tag as MyHolder
}
myHolder.name.text = datas.get(position).name
myHolder.age.text = datas.get(position).age
myHolder.classview.text = datas.get(position).classview
return view!!
}
override fun getItem(position: Int): Any {
//获取指定位置(position)上的item对象,通常不需要修改
return datas.get(position)
}
override fun getItemId(position: Int): Long {
// 获取指定位置(position)上的item的id,通常不需要修改
return position.toLong()
}
override fun getCount(): Int {
//返回一个整数,就是要在listview中现实的数据的条数
return datas.size
}
}