显式意图在启动画面后自动启动新活动

时间:2012-02-12 17:06:26

标签: android android-intent

我仍然很新,我正在开发我的第一个应用程序。我遇到的问题是这个。

我的启动画面运行正常,但是当它切换到新活动时我一直收到错误。我知道问题出在意图中,但我不知道它是什么或如何解决它。我的代码是:

 splashTread = new Thread() {
                @Override
                public void run() {
                    try {
                        synchronized(this){

                            //wait 5 sec
                            wait(_splashTime);
                        }

                    } catch(InterruptedException e) {}
                    finally {
                        finish();

                        //start a new activity

                                Intent intent = new Intent(MAIN.this, Home.class);
                                startActivity(intent);

                        stop();

并且猫日志是:

02-12 13:01:46.009: D/AndroidRuntime(753): Shutting down VM
02-12 13:01:46.009: W/dalvikvm(753): threadid=1: thread exiting with uncaught exception (group=0x4001e560)
02-12 13:01:46.049: E/AndroidRuntime(753): FATAL EXCEPTION: main
02-12 13:01:46.049: E/AndroidRuntime(753): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.madonk.LAFEST/com.madonk.LAFEST.Home}: java.lang.ClassCastException: android.widget.LinearLayout
02-12 13:01:46.049: E/AndroidRuntime(753):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1702)
02-12 13:01:46.049: E/AndroidRuntime(753):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1722)
02-12 13:01:46.049: E/AndroidRuntime(753):  at android.app.ActivityThread.access$1500(ActivityThread.java:124)
02-12 13:01:46.049: E/AndroidRuntime(753):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:974)
02-12 13:01:46.049: E/AndroidRuntime(753):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-12 13:01:46.049: E/AndroidRuntime(753):  at android.os.Looper.loop(Looper.java:130)
02-12 13:01:46.049: E/AndroidRuntime(753):  at android.app.ActivityThread.main(ActivityThread.java:3821)
02-12 13:01:46.049: E/AndroidRuntime(753):  at java.lang.reflect.Method.invokeNative(Native Method)
02-12 13:01:46.049: E/AndroidRuntime(753):  at java.lang.reflect.Method.invoke(Method.java:507)
02-12 13:01:46.049: E/AndroidRuntime(753):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-12 13:01:46.049: E/AndroidRuntime(753):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-12 13:01:46.049: E/AndroidRuntime(753):  at dalvik.system.NativeStart.main(Native Method)
02-12 13:01:46.049: E/AndroidRuntime(753): Caused by: java.lang.ClassCastException: android.widget.LinearLayout
02-12 13:01:46.049: E/AndroidRuntime(753):  at android.app.ListActivity.onContentChanged(ListActivity.java:241)
02-12 13:01:46.049: E/AndroidRuntime(753):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256)
02-12 13:01:46.049: E/AndroidRuntime(753):  at android.app.Activity.setContentView(Activity.java:1716)
02-12 13:01:46.049: E/AndroidRuntime(753):  at com.madonk.LAFEST.Home.onCreate(Home.java:11)
02-12 13:01:46.049: E/AndroidRuntime(753):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-12 13:01:46.049: E/AndroidRuntime(753):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1666)
02-12 13:01:46.049: E/AndroidRuntime(753):  ... 11 more

家庭活动

package com.madonk.LAFEST;

import android.app.ListActivity;
import android.os.Bundle;

public class Home extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);
    }
}

4 个答案:

答案 0 :(得分:1)

似乎你使用ListActivity。 ListActivity的document

  

您可以通过设置自己的视图布局来自定义屏幕布局   在onCreate()中使用setContentView()。要做到这一点,你自己的观点必须   包含一个ID为“@android:id / list”的ListView对象(或列出if   它在代码中)

检查项目中的res / layout / home.xml。基于你的例外我相信你把那个id放在你的LinearLayout中,所以将你的“@android:id / list”从LinearLayout移动到ListView 。或发布您的home.xml。

答案 1 :(得分:0)

将其更改为:

Intent intent = new Intent(getBaseContext(), Home.class);
                                    startActivity(intent);

文档说:

  

Intent(Context packageContext,Class cls)为a创建一个intent   特定组成部分。

您错过了将您的上下文置于意图中。

您可以在此处详细了解Intents:

  

http://developer.android.com/reference/android/content/Intent.html

在这里:

  

http://developer.android.com/guide/topics/fundamentals/activities.html

这是关于Intents的一个很好的教程:

  

http://www.vogella.de/articles/AndroidIntent/article.html

你真的应该阅读教程。它帮了我很多!

编辑:您正在调用finish()和stop()。调用finish()将调用你的onDestroy()。当你调用stop()后调用finish()时,我不确定会发生什么。您应该删除对stop()的调用。

答案 2 :(得分:0)

基于以下两行:

02-12 13:01:46.049: E/AndroidRuntime(753): Caused by: java.lang.ClassCastException: android.widget.LinearLayout 02-12
13:01:46.049: E/AndroidRuntime(753):  at android.app.ListActivity.onContentChanged(ListActivity.java:241)

我愿意打赌R.layout.home是一个LinearLayout,而不是ListActivity。

同样,这一行特别指向setContentView电话:

at com.madonk.LAFEST.Home.onCreate(Home.java:11)

答案 3 :(得分:-1)

试试这个: -

Intent intent = new Intent(getActivity(), Home.class);
startActivity(intent);