This code demonstrates two approaches to disable items in a ListView within an Android application written in Kotlin. Disabling an item prevents the user from clicking it and performing any associated actions. The code includes a button that allows the user to manually disable an item and also showcases programmatic disabling during the list adapter initialization.
Breakdown of the Code
The code consists of two main parts: the MainActivity.kt
file containing the Activity code and the activity_main.xml
file defining the layout.
- MainActivity.kt:
- This file defines the
MainActivity
class which extends theActivity
class. - It retrieves references to the UI elements (Button, ListView, TextView) from the layout using
findViewById
. - It creates a list of color names to populate the ListView.
- An
ArrayAdapter
is initialized with the list data. This adapter provides a bridge between the data and the ListView.- The
isEnabled
method of the adapter overrides the default behavior. It returnsfalse
only for the item at position 4 (index starts from 0), effectively disabling clicks on that specific item. - The
getView
method additionally sets the text view color for the disabled item, but this doesn't actually prevent clicks.
- The
- The adapter is attached to the ListView.
- An
onItemClickListener
is set for the ListView to capture user clicks and display the selected item in a TextView. - A button click listener is implemented. Clicking the button disables the button itself and then disables the third item (index 2) in the ListView by directly modifying its properties.
- This file defines the
Summary
This code provides a comprehensive example of disabling ListView items in Kotlin. It demonstrates both programmatic control during adapter initialization and user interaction through a button click. By understanding the isEnabled
method and direct view manipulation, developers can achieve different levels of item disabling functionality within their Android applications.
MainActivity.kt
package com.cfsuman.kotlintutorials
import android.app.Activity
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.*
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// get the widgets reference from XML layout
val button = findViewById<Button>(R.id.button)
val listView = findViewById<ListView>(R.id.listView)
val textView = findViewById<TextView>(R.id.textView)
// list to populate list view
val list = mutableListOf(
"Golden yellow",
"Han purple",
"Hansa yellow",
"Jazzberry jam",
"Jungle green",
"Lavender blush",
"Lawn green"
)
// initialize an array adapter
val adapter:ArrayAdapter<String> = object: ArrayAdapter<String>(
this,
android.R.layout.simple_dropdown_item_1line,
list
){
override fun isEnabled(position: Int): Boolean {
// disable adapter fifth item at array adapter initialization
// this actually disable list view item click
return position != 4
}
override fun getView(position: Int, convertView: View?,
parent: ViewGroup): View {
val tv = super.getView(position,
convertView, parent) as TextView
// show the disable text color for fifth item
// this actually not disable the list view item click
tv.isEnabled = position != 4
return tv
}
}
// attach the array adapter with list view
listView.adapter = adapter
// list view item click listener
listView.onItemClickListener = AdapterView.OnItemClickListener {
parent, view, position, id ->
val selectedItem = parent?.getItemAtPosition(position)
.toString()
textView.text = selectedItem
}
// disable list view third item on button click
button.setOnClickListener {
// disable the button itself
it.isEnabled = false
// disable the third item of list view
val view = listView.getChildAt(2)
view.setOnClickListener { }
view.isEnabled = false
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rootLayout"
android:background="#DCDCDC"
android:padding="24dp">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Disable Third Item"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ListView
android:id="@+id/listView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="24dp"
app:layout_constraintBottom_toTopOf="@+id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/button" />
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Select your favorite color"
android:fontFamily="sans-serif"
android:gravity="center"
android:textColor="#333399"
android:textSize="24sp"
android:textStyle="italic"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>