This error comes up in the logcat when I try to click on a button in my application and it crashes:
```
FATAL EXCEPTION: main
Process: com.example.savedtrial, PID: 16090
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.savedtrial/com.google.android.material.button.MaterialButton}; have you declared this activity in your AndroidManifest.xml, or does your intent not match its declared <intent-filter>?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2197)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1839)
at android.app.Activity.startActivityForResult(Activity.java:5471)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:728)
at android.app.Activity.startActivityForResult(Activity.java:5429)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:709)
at android.app.Activity.startActivity(Activity.java:5927)
at android.app.Activity.startActivity(Activity.java:5894)
at com.example.savedtrial.MainActivity.onCreate$lambda$0(MainActivity.kt:23)
at com.example.savedtrial.MainActivity.$r8$lambda$47nZOKobj58xqg2t-Q-x4Lw-Afk(Unknown Source:0)
at com.example.savedtrial.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:4)
at android.view.View.performClick(View.java:7506)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1131)
at android.view.View.performClickInternal(View.java:7483)
at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:29334)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
```
Here is my Mainfest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package = "com.example.savedtrial"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.SAVEDTRIAL"
tools:targetApi="31">
<activity
android:name="com.example.savedtrial.contacting"
android:exported="false"
android:parentActivityName="com.example.savedtrial.MainActivity"/>
<activity
android:name="com.example.savedtrial.Collab"
android:exported="false"
android:parentActivityName="com.example.savedtrial.MainActivity"/>
<activity
android:name="com.example.savedtrial.notes"
android:exported="false"
android:parentActivityName="com.example.savedtrial.MainActivity" />
<activity
android:name="com.example.savedtrial.Calender"
android:exported="false"
android:parentActivityName="com.example.savedtrial.MainActivity" />
<activity
android:name="com.example.savedtrial.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
Main Kotlin file with the button code
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val actionBar = supportActionBar
supportActionBar!!.setTitle("PROductivity")
val calender: Button = findViewById(R.id.calender)
calender.setOnClickListener {
val intent = Intent(this, calender::class.java)
startActivity(intent)
}
val notes: Button = findViewById(R.id.notes)
notes.setOnClickListener {
val intent = Intent(this, notes::class.java)
startActivity(intent)
}
val contacting: Button = findViewById(R.id.contacting)
contacting.setOnClickListener {
val intent = Intent(this, contacting::class.java)
startActivity(intent)
}
val collab: Button = findViewById(R.id.collab)
collab.setOnClickListener {
val intent = Intent(this, collab::class.java)
startActivity(intent) }
}
}
Here is the code for one of the files that is supposed to show up when the its respective button is clicked (Just an action bar with back button)
package com.example.savedtrial
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
class contacting : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_contacting)
val actionBar = supportActionBar
supportActionBar!!.setTitle("Contacting")
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
}
}
My main activity layout
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/calender"
android:layout_width="126dp"
android:layout_height="53dp"
android:text="Calender"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.021"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.3" />
<Button
android:id="@+id/notes"
android:layout_width="127dp"
android:layout_height="54dp"
android:text="Notes"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.021"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.473" />
<Button
android:id="@+id/contacting"
android:layout_width="129dp"
android:layout_height="51dp"
android:text="Contacting"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.02"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.672" />
<Button
android:id="@+id/collab"
android:layout_width="129dp"
android:layout_height="51dp"
android:text="Collab. Whiteboard"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.019"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.844" />
<TextView
android:id="@+id/productivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="PROductivity"
android:textColor="#EA1616"
android:textSize="34sp"
android:textStyle="bold|italic"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
I am new to Android Studio, so if possible, try not to delve into extremely complicated stuff, but don't worry if you have to - I'll figure it out.
The important part of the error message is this part:
This means you passed a Button, not an Activity when you called
startActivity. And indeed we can see this in your firstsetOnClickListener, where you refer to the wrong classes when constructing your intents:You're using the
Buttoninstance namedcalendarfor your class. It should beCalendarto match your manifest class - note the capitalCto refer to your activity class, not your local variable:Similarly for every other click listener (except for maybe the
notesactivity, which you've also made lowercase, making it even harder to distinguish between a local variable and class name - you should always name your classes with a capital letter).You'll find things much easier to understand if you separate the names of your variables from your class names. That's why you usually see classes named like
CalendarActivity,CollabActivity, etc. where you can more easily determine what is an activity instance versus what is a button that starts that activity (calendar,collab, etc.).