ListView常规用法
代码
- Menifest:
 
<activity android:name=".listView.ListViewActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>- Layout:
 
fruit_listview_item:
<?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="60dp">
    <ImageView
        android:id="@+id/fruit_image"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fruit_name"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"/>
</LinearLayout>activity_listview_fruit:
<?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">
    <ListView
        android:id="@+id/fruit_listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>- Kotlin:
 
Fruit:
class Fruit(val name:String,val imageId:Int)ListViewAdapter:
class ListViewAdapter(activity: Activity, private val resourceId: Int, data: List<Fruit>) :
    ArrayAdapter<Fruit>(activity, resourceId, data) {
    inner class ViewHolder(val fruitImage:ImageView,val fruitName:TextView)
    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        val view: View
        val viewHolder: ViewHolder
        if(convertView== null){
            view=LayoutInflater.from(context).inflate(resourceId, parent, false)
            val fruitImage:ImageView=view.findViewById(R.id.fruit_image)
            val fruitName:TextView=view.findViewById(R.id.fruit_name)
            viewHolder=ViewHolder(fruitImage,fruitName)
            view.tag=viewHolder
        }else{
            view= convertView
            viewHolder=view.tag as ViewHolder
        }
        val fruit = getItem(position)//获取当前项的Fruit实例
        fruit?.let {
            viewHolder.fruitImage.setImageResource(it.imageId)
            viewHolder.fruitName.text = it.name
        }
        return view
    }
}ListViewActivity:
class ListViewActivity:AppCompatActivity() {
    private val fruitList=ArrayList<Fruit>()
    lateinit var fruitBinding: ActivityListviewFruitBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        fruitBinding= ActivityListviewFruitBinding.inflate(layoutInflater)
        setContentView(fruitBinding.root)
        initFruits()
        val adapter=ListViewAdapter(this, R.layout.fruit_listview_item,fruitList)
        fruitBinding.fruitListView.adapter=adapter
        fruitBinding.fruitListView.setOnItemClickListener { _, _, position, _ ->
            val fruit=fruitList[position]
            Toast.makeText(this,fruit.name,Toast.LENGTH_SHORT).show()
        }
    }
    private fun initFruits() {
        repeat(2){
            fruitList.apply {
                add(Fruit("Apple",R.drawable.fruit))
                add(Fruit("Pear",R.drawable.fruit))
                add(Fruit("Banana",R.drawable.fruit))
                add(Fruit("Watermelon",R.drawable.fruit))
                add(Fruit("Orange",R.drawable.fruit))
                add(Fruit("Grape",R.drawable.fruit))
                add(Fruit("Pineapple",R.drawable.fruit))
                add(Fruit("Strawberry",R.drawable.fruit))
                add(Fruit("Cherry",R.drawable.fruit))
                add(Fruit("Mango",R.drawable.fruit))
            }
        }
    }
}
效果

纯文字写法:
- Kotlin:
 
class SecondActivity : AppCompatActivity() {
    private lateinit var secondBinding: ActivitySecondBinding
    private val data = listOf("Apple","Banana","Orange","Watermelon","Pear","Grape","Pineapple","Strawberry",
    "Cherry","Mango","Apple","Banana","Orange","Watermelon","Pear","Grape","Pineapple","Strawberry")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        secondBinding = ActivitySecondBinding.inflate(layoutInflater)
        setContentView(secondBinding.root)
        val adapter=ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data)
        secondBinding.secondListView.adapter=adapter
    }
}                
                










