简体   繁体   中英

Intent Not Starting Activity (will work for one activity, but not the other)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM