I have two activities: MainActivity and MenuActivity. If I try to start MainActivity after the SplashActivity, it works fine, but if I try to do the same with MenuActivity, it gives me an error, what am I doing wrong?.
<activity
android:name=".SplashActivity"
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" >
<intent-filter>
<action android:name="android.intent.action.MENUACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAINACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
public class SplashActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
Thread timer = new Thread(){
public void run (){
try {
Thread.sleep(5000);
} catch(Exception e){
} finally {
Intent openMenuActivity = new Intent("android.intent.action.MAINACTIVITY");
//THIS WORKS FINE
//HOWEVER,
//Intent openMenuActivity = new Intent("android.intent.action.MENUACTIVITY");
//THIS DOESN'T, WHY?
startActivity(openMenuActivity);
}
}
};
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_splashactivity);
timer.start();
}
}
package com.test.test1;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class MenuActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_menuactivity);
}
}
package com.test.test1;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
public class MenuButtonView extends View{
public MenuButtonView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MenuButtonView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MenuButtonView(Context context, AttributeSet attrs, int in) {
super(context, attrs, in);
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.test.test1.MenuButtonView
android:id="@+id/menubuttonview"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight=".7"
android:layout_gravity="bottom" />
<com.test.test1.MenuLogoView
android:id="@+id/menulogoview"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight=".3"
android:layout_gravity="top" />
</LinearLayout>
08-22 04:01:21.649: E/AndroidRuntime(274): FATAL EXCEPTION: main
08-22 04:01:21.649: E/AndroidRuntime(274): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.test1/com.test.test1.MenuActivity}: android.view.InflateException: Binary XML file line #14: Error inflating class com.test.test1.MenuLogoView
08-22 04:01:21.649: E/AndroidRuntime(274): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.os.Handler.dispatchMessage(Handler.java:99)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.os.Looper.loop(Looper.java:123)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-22 04:01:21.649: E/AndroidRuntime(274): at java.lang.reflect.Method.invokeNative(Native Method)
08-22 04:01:21.649: E/AndroidRuntime(274): at java.lang.reflect.Method.invoke(Method.java:521)
08-22 04:01:21.649: E/AndroidRuntime(274): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-22 04:01:21.649: E/AndroidRuntime(274): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-22 04:01:21.649: E/AndroidRuntime(274): at dalvik.system.NativeStart.main(Native Method)
08-22 04:01:21.649: E/AndroidRuntime(274): Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class com.test.test1.MenuLogoView
08-22 04:01:21.649: E/AndroidRuntime(274): at android.view.LayoutInflater.createView(LayoutInflater.java:503)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
08-22 04:01:21.649: E/AndroidRuntime(274): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.app.Activity.setContentView(Activity.java:1647)
08-22 04:01:21.649: E/AndroidRuntime(274): at com.test.test1.MenuActivity.onCreate(MenuActivity.java:12)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
08-22 04:01:21.649: E/AndroidRuntime(274): ... 11 more
08-22 04:01:21.649: E/AndroidRuntime(274): Caused by: java.lang.NoSuchMethodException: MenuLogoView(Context,AttributeSet)
08-22 04:01:21.649: E/AndroidRuntime(274): at java.lang.Class.getMatchingConstructor(Class.java:660)
08-22 04:01:21.649: E/AndroidRuntime(274): at java.lang.Class.getConstructor(Class.java:477)
08-22 04:01:21.649: E/AndroidRuntime(274): at android.view.LayoutInflater.createView(LayoutInflater.java:475)
08-22 04:01:21.649: E/AndroidRuntime(274): ... 21 more
That error is saying that you need to create the constructor for MenuButtonView
that custom view used in xml form must implement the three default constructors:
Make sure you have this constructors in your MenuButtonView
class
MenuButtonView(Context context,AttributeSet attrs)
MenuButtonView(Context context)
MenuButtonView(Context context, AttributeSet attrs, int defStyleAttr)
Error is in your layout_menuactivity.xml file. You are giving reference to some method of your MenuActivity class which is not yet implemented in that class. so its throwing error. Check your layout file once.
Check you R.layout.layout_menuactivity
layout. I think problem is there.
you used a custom view name MenuLogoView
without constructure.
Create constructure like:
MenuButtonView(Context context,AttributeSet attr)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.