如何在 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.