如何在 Kotlin 中创建带有复选框的 ListView?

kotlin apps/applicationsmobile development更新于 2026/2/11 1:37:17

此示例演示了如何在 Kotlin 中创建带有复选框的 ListView。

步骤 1 − 在 Android Studio 中创建一个新项目,前往"文件">"新建项目",并填写所有必填信息以创建新项目。

步骤 2 − 将以下代码添加到 res/layout/activity_main.xml。

示例

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:padding="4dp"
   tools:context=".MainActivity">
<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
</RelativeLayout>

步骤 3 − 将以下代码添加到 src/MainActivity.kt

示例

import android.view.View
import android.widget.AdapterView.OnItemClickListener
import android.widget.ListView
import androidx.appcompat.app.AppCompatActivity
import java.util.*
class MainActivity : AppCompatActivity() {
   private var dataModel: ArrayList<DataModel>? = null
   private lateinit var listView: ListView
   private lateinit var adapter: CustomAdapter
   override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)
      title = "KotlinApp"
      listView = findViewById<View>(R.id.listView) as ListView
      dataModel = ArrayList<DataModel>()
      dataModel!!.add(DataModel("Apple Pie", false))
      dataModel!!.add(DataModel("Banana Bread", false))
      dataModel!!.add(DataModel("Cupcake", false))
      dataModel!!.add(DataModel("Donut", true))
      dataModel!!.add(DataModel("Eclair", true))
      dataModel!!.add(DataModel("Froyo", true))
      dataModel!!.add(DataModel("Gingerbread", true))
      dataModel!!.add(DataModel("Honeycomb", false))
      dataModel!!.add(DataModel("Ice Cream Sandwich", false))
      dataModel!!.add(DataModel("Jelly Bean", false))
      dataModel!!.add(DataModel("Kitkat", false))
      dataModel!!.add(DataModel("Lollipop", false))
      dataModel!!.add(DataModel("Marshmallow", false))
      dataModel!!.add(DataModel("Nougat", false))
      adapter = CustomAdapter(dataModel!!, applicationContext)
      listView.adapter = adapter
      listView.onItemClickListener = OnItemClickListener { _, _, position, _ ->
         val dataModel: DataModel = dataModel!![position] as DataModel
         dataModel.checked = !dataModel.checked
         adapter.notifyDataSetChanged()
      }
   }
}

步骤 4  − 创建一个新的 Kotlin 类(CustomAdapter.kt),并将以下代码添加到 src/CustomAdapter.kt

示例

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.CheckBox
import android.widget.TextView
import java.util.*
class CustomAdapter(private val dataSet: ArrayList<*>, mContext: Context) :
ArrayAdapter<Any?>(mContext, R.layout.row_item, dataSet) {
   private class ViewHolder {
      lateinit var txtName: TextView
      lateinit var checkBox: CheckBox
   }
   override fun getCount(): Int {
      return dataSet.size
   }
   override fun getItem(position: Int): DataModel {
      return dataSet[position] as DataModel
   }
   override fun getView(
   position: Int,
   convertView: View?,
   parent: ViewGroup
   ): View {
      var convertView = convertView
      val viewHolder: ViewHolder
      val result: View
      if (convertView == null) {
         viewHolder = ViewHolder()
         convertView =
         LayoutInflater.from(parent.context).inflate(R.layout.row_item, parent, false)
         viewHolder.txtName =
         convertView.findViewById(R.id.txtName)
         viewHolder.checkBox =
         convertView.findViewById(R.id.checkBox)
         result = convertView
         convertView.tag = viewHolder
      } else {
         viewHolder = convertView.tag as ViewHolder
         result = convertView
      }
      val item: DataModel = getItem(position)
      viewHolder.txtName.text = item.name
      viewHolder.checkBox.isChecked = item.checked
      return result
   }
}

步骤 5 − 创建一个新的 Kotlin 类 (DataModel.kit),并将以下代码添加到 src/DataModel.kt

package app.com.q3
class DataModel internal constructor(var name: String?, var checked: Boolean)

步骤 6 − 创建布局资源文件 (row_item.xml),并添加以下代码 −

示例

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:padding="2dp">
   <TextView
      android:id="@+id/txtName"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentStart="true"
      android:layout_centerVertical="true"
      android:textColor="@android:color/background_dark"
      android:textSize="16sp" />
   <CheckBox
      android:id="@+id/checkBox"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentTop="true"
      android:layout_alignParentEnd="true" />
</RelativeLayout>

步骤 7− 将以下代码添加到 androidManifest.xml

示例

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="app.com.q1">
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
   </application>
</manifest>

让我们尝试运行您的应用程序。假设您已将实际的 Android 移动设备连接到电脑。要从 Android Studio 运行该应用程序,请打开项目的某个活动文件,然后点击工具栏上的"运行"图标。选择您的移动设备作为选项,然后勾选将显示默认屏幕的移动设备。


相关文章