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


此示例演示了如何在 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 运行应用程序,请打开您项目中的一个活动文件,然后单击工具栏中的运行 图标。选择您的移动设备作为选项,然后检查您的移动设备,它将显示您的默认屏幕

更新于: 2020年5月23日

1K+ 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.