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

    }

}