PROGRAMMING FOR MOBILE PLATFORMS
11. KOTLIN VERSION OF THE PROJECT Kotlin
KOTLIN VERSION OF THE PROJECT
Kotlin
package com.example.todolist
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.EditText
import android.widget.Button
import android.view.View
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.LinearLayoutManager
class MainActivity : AppCompatActivity() {
private lateinit var editTextItem: EditText // Declare EditText variable (lateinit because it's initialized later)
private lateinit var buttonAdd: Button // Declare Button variable
private lateinit var recyclerViewItems: RecyclerView // Declare RecyclerView variable
private val todoItems = ArrayList<String>() // Initialize the list (Kotlin's ArrayList)
private lateinit var adapter: TodoAdapter // Declare TodoAdapter variable
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) // Set the layout
editTextItem = findViewById(R.id.editTextItem) // Initialize EditText
buttonAdd = findViewById(R.id.buttonAdd) // Initialize Button
recyclerViewItems = findViewById(R.id.recyclerViewItems) // Initialize RecyclerView
// RecyclerView setup
recyclerViewItems.layoutManager = LinearLayoutManager(this) // Set layout manager
adapter = TodoAdapter(todoItems) // Create adapter
recyclerViewItems.adapter = adapter // Set adapter
buttonAdd.setOnClickListener { // Kotlin's concise way to set a click listener
val newItem = editTextItem.text.toString().trim() // Get and trim text
if (newItem.isNotEmpty()) { // Kotlin's way to check for empty string
todoItems.add(newItem) // Add to list
adapter.notifyItemInserted(todoItems.size - 1) // Notify adapter
editTextItem.text.clear() // Clear EditText (Kotlin way)
} else {
Toast.makeText(this, "Please enter an item", Toast.LENGTH_SHORT).show() // Show Toast
}
}
}
}
// Adapter (TodoAdapter.kt):
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class TodoAdapter(private val todoItems: List<String>) : RecyclerView.Adapter<TodoAdapter.TodoViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TodoViewHolder {
val view = LayoutInflater.from(parent.context).inflate(android.R.layout.simple_list_item_1, parent, false)
return TodoViewHolder(view)
}
override fun onBindViewHolder(holder: TodoViewHolder, position: Int) {
val item = todoItems[position] // Kotlin's way to access list items
holder.textViewItem.text = item
}
override fun getItemCount(): Int {
return todoItems.size
}
class TodoViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val textViewItem: TextView = itemView.findViewById(android.R.id.text1) // Initialize TextView
}
}