'App crashes on clicking listView item rather than opening a new activity

The app just crashes right when I click on an item in the listView. What it should do is open the BookAppointment.xml activity but it just keeps on crashing. I have no idea what I am doing wrong, please help me out here. Thanks in advance!

This is my code:

MainActivity.kt (The main file)

package com.clinicset.clinicset

import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    val name = arrayOf<String>("Rafael Battle", "Dani Gilbert", "Ayoub Crosby", "Leandro Jenkins", "Kayne Logan", "Enrique Krause", "Arianne Merrill", "Jacques Serrano", "Ahmad Lloyd", "Aria Greenwood")
    val speciality = arrayOf<String>("General Medicine", "General Medicine", "General Medicine", "General Medicine", "Child Specialist", "Dental Hygenist", "General Medicine", "General Medicine", "General Medicine", "General Medicine")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val myListAdapter = MyListAdapter(this,name,speciality)
        listView.adapter = myListAdapter

        listView.setOnItemClickListener() { _, _, _, _ ->
            val intent = Intent(this, BookAppointment::class.java)
            startActivity(intent)
        }
    }
}

BookAppointment.kt (The file it should be using when someone clicks on an item)

package com.clinicset.clinicset

import android.app.DatePickerDialog
import android.app.TimePickerDialog
import android.os.Bundle
import android.text.format.DateFormat
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
import java.util.*

class BookAppointment : AppCompatActivity(), DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener {
    lateinit var textView: TextView
    lateinit var button: Button
    var day = 0
    var month: Int = 0
    var year: Int = 0
    var hour: Int = 0
    var minute: Int = 0
    var myDay = 0
    var myMonth: Int = 0
    var myYear: Int = 0
    var myHour: Int = 0
    var myMinute: Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.book_appointment)
//        title = "ClinicSet"
        textView = findViewById(R.id.textView)
        button = findViewById(R.id.btnPick)
        button.setOnClickListener {
            val calendar: Calendar = Calendar.getInstance()
            day = calendar.get(Calendar.DAY_OF_MONTH)
            month = calendar.get(Calendar.MONTH)
            year = calendar.get(Calendar.YEAR)
            val datePickerDialog =
                DatePickerDialog(this@BookAppointment, this@BookAppointment, year, month,day)
            datePickerDialog.show()
        }

        val bookButton = findViewById<Button>(R.id.book_btn)
        bookButton.setOnClickListener {
            if (myMonth == 0 || myDay == 0 || myHour == 0 || myMinute == 0) {
                Toast.makeText(this, "Select a valid date.", Toast.LENGTH_LONG).show()
            }
            Toast.makeText(this, "Confirmed for $myDay/$myMonth at $myHour:$myMinute", Toast.LENGTH_LONG).show()
        }
    }

    override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
        myDay = day
        myYear = year
        myMonth = month
        val calendar: Calendar = Calendar.getInstance()
        hour = calendar.get(Calendar.HOUR)
        minute = calendar.get(Calendar.MINUTE)
        val timePickerDialog = TimePickerDialog(this@BookAppointment, this@BookAppointment, hour, minute,
            DateFormat.is24HourFormat(this))
        timePickerDialog.show()
    }

    override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
        myHour = hourOfDay
        myMinute = minute
        textView.text = "Date: " + myDay + "/" + myMonth + "\n Time: " + myHour + ":" + myMinute
    }
}

Error Message:

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.clinicset.clinicset/com.clinicset.clinicset.BookAppointment}; have you declared this activity in your AndroidManifest.xml?
    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2064)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1720)
    at android.app.Activity.startActivityForResult(Activity.java:5277)
    at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:574)
    at android.app.Activity.startActivityForResult(Activity.java:5235)
    at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:560)
    at android.app.Activity.startActivity(Activity.java:5606)
    at android.app.Activity.startActivity(Activity.java:5574)
    at com.clinicset.clinicset.MainActivity$onCreate$1.onItemClick(MainActivity.kt:38)
    at android.widget.AdapterView.performItemClick(AdapterView.java:330)
    at android.widget.AbsListView.performItemClick(AbsListView.java:1219)
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3230)
    at android.widget.AbsListView$3.run(AbsListView.java:4186)
    at android.os.Handler.handleCallback(Handler.java:914)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:225)
    at android.app.ActivityThread.main(ActivityThread.java:7564)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)


Solution 1:[1]

You get this error because you haven't declared the BookAppointment activity in the AndroidManifest.xml file. Please declare the BookAppointment activity in the AndroidManifest.xml file like the following:

<activity android:name="com.clinicset.clinicset.BookAppointment" />

More info is here.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1