Reputation: 97
Hi Ive written a simple android application with two xml pages, one has an image button which ive rigged to open the second xml page when it is clicked. The code returns no errors and runs fine but when I click the button in the android emulator it crashes and asks me to force close. Here is the code I am working on:
First Activity:
package com.android.Train;
import com.android.TrainMenu.MenuActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class TrainActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void goMenu(View v)
{
Intent myIntent = new Intent(this, MenuActivity.class);
startActivity(myIntent);
}
}
First XML File:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageButton
android:id="@+id/enterButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_enter"
android:clickable="true"
android:onClick="goMenu" />
</LinearLayout>
Second Activity:
package com.android.TrainMenu;
import android.app.Activity;
import android.os.Bundle;
import com.android.Train.R;
public class MenuActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.menu);
}
}
Second XML File:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</RelativeLayout>
Any ideas on why this should crash?
Thanks in advance
I just ran it again, here is the logCat file
01-26 14:21:37.784: D/AndroidRuntime(287): Shutting down VM
01-26 14:21:37.784: W/dalvikvm(287): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
01-26 14:21:37.815: E/AndroidRuntime(287): FATAL EXCEPTION: main
01-26 14:21:37.815: E/AndroidRuntime(287): java.lang.IllegalStateException: Could not execute method of the activity
01-26 14:21:37.815: E/AndroidRuntime(287): at android.view.View$1.onClick(View.java:2072)
01-26 14:21:37.815: E/AndroidRuntime(287): at android.view.View.performClick(View.java:2408)
01-26 14:21:37.815: E/AndroidRuntime(287): at android.view.View$PerformClick.run(View.java:8816)
01-26 14:21:37.815: E/AndroidRuntime(287): at android.os.Handler.handleCallback(Handler.java:587)
01-26 14:21:37.815: E/AndroidRuntime(287): at android.os.Handler.dispatchMessage(Handler.java:92)
01-26 14:21:37.815: E/AndroidRuntime(287): at android.os.Looper.loop(Looper.java:123)
01-26 14:21:37.815: E/AndroidRuntime(287): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-26 14:21:37.815: E/AndroidRuntime(287): at java.lang.reflect.Method.invokeNative(Native Method)
01-26 14:21:37.815: E/AndroidRuntime(287): at java.lang.reflect.Method.invoke(Method.java:521)
01-26 14:21:37.815: E/AndroidRuntime(287): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-26 14:21:37.815: E/AndroidRuntime(287): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-26 14:21:37.815: E/AndroidRuntime(287): at dalvik.system.NativeStart.main(Native Method)
01-26 14:21:37.815: E/AndroidRuntime(287): Caused by: java.lang.reflect.InvocationTargetException
01-26 14:21:37.815: E/AndroidRuntime(287): at com.android.Train.TrainActivity.goMenu(TrainActivity.java:23)
01-26 14:21:37.815: E/AndroidRuntime(287): at java.lang.reflect.Method.invokeNative(Native Method)
01-26 14:21:37.815: E/AndroidRuntime(287): at java.lang.reflect.Method.invoke(Method.java:521)
01-26 14:21:37.815: E/AndroidRuntime(287): at android.view.View$1.onClick(View.java:2067)
01-26 14:21:37.815: E/AndroidRuntime(287): ... 11 more
01-26 14:21:37.815: E/AndroidRuntime(287): Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.Train/com.android.TrainMenu.MenuActivity}; have you declared this activity in your AndroidManifest.xml?
01-26 14:21:37.815: E/AndroidRuntime(287): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
01-26 14:21:37.815: E/AndroidRuntime(287): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
01-26 14:21:37.815: E/AndroidRuntime(287): at android.app.Activity.startActivityForResult(Activity.java:2817)
01-26 14:21:37.815: E/AndroidRuntime(287): at android.app.Activity.startActivity(Activity.java:2923)
01-26 14:21:37.815: E/AndroidRuntime(287): ... 15 more
Android Manifest.XML
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.Train"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".TrainActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MenuActivity"
android:label="@string/app_name" />
</application>
</manifest>
Upvotes: 1
Views: 7050
Reputation: 68167
Make sure you add both activities in your AndroidManifest.xml
file .
Upvotes: 0
Reputation: 10908
I think its because your MenuActivity
class is in a different package to your TrainActivity
class. I'm not sure how to do it with the package layout you have, but if you had the following:
com.ardroid.train.TrainActivity
com.ardroid.train.menu.MenuActivity
Then your manifest entry would be:
<activity
android:name=".menu.MenuActivity "
android:label="@string/app_name" />
Upvotes: 2
Reputation: 756
First you need to add the activity to your manifest file (without whitespaces):
<activity android:name=".MenuActivity"></activity>
Second, for the button itself this is a suggestion for how it could be done:
import com.android.TrainMenu.MenuActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class TrainActivity extends Activity
{
ImageButton button;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (ImageButton) findViewById(R.id.enterButton);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
goMenu();
}
});
}
public void goMenu()
{
Intent myIntent = new Intent(this, MenuActivity.class);
startActivity(myIntent);
}
}
Upvotes: 0
Reputation: 143
You need instanciation ImageButtom on Activty:
ImageButton btnImg;
... oncreadte(...) {
btnImg = (ImageButton) findViewById(R.id.enterButton);
...
btnImg.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// This call new Activity on press ImageButton
Intent it = new Intent(TrainActivity.this, MenuActivity.class);
startActivity(it);
}
}
Good luck.
Upvotes: 0
Reputation: 2926
i think you have not entered activity in manifest file each activity must be there in AndroidManifest.xml file such like this
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".TrainActivity "
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MenuActivity "
android:label="@string/app_name" />
</application>
and if problem then use Intent myIntent = new Intent(TrainActivity.this, MenuActivity.class);
Upvotes: 0