'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" />
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 |
