2

我正在关注一个 youtube 教程来创建 android 应用程序。在其中一个教程中,他们讲述了如何使用 List 活动创建 Menu 类。

public class Menu extends ListActivity {

String classes[] = {"Start","example1","example2","example3","example4","example5","example6"};


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setListAdapter(new ArrayAdapter<String>(Menu.this, android.R.layout.simple_list_item_1, classes));
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);
    String cheese = classes[position];
    try{
        Class ourClass = Class.forName("com.example.add." + cheese);
        Intent ourIntent = new Intent(Menu.this,ourClass);
        startActivity(ourIntent);
    }catch(ClassNotFoundException e){
        e.printStackTrace();
    }
}

并在清单中添加活动。

<activity
        android:name=".Splash"
        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:exported="false"
        android:name=".Menu"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MENU" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

    <activity
        android:exported="false"
        android:name="com.example.add.Start"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="com.example.add.START" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

我的项目有一个 Start 类,它向计数器添加一个并显示它,一个 Splash 类,它定义背景图像、音乐,它是主类。在添加 Menu 类之前,我的应用程序运行良好,但是在我添加它之后,我的应用程序开始强制关闭,并且 logcat 在第 28 行的 Splash 类中显示了 ActivityNotFoundException 和错误

public class Splash extends Activity{

MediaPlayer ourSong;

@Override
protected void onCreate(Bundle Dab) {
    // TODO Auto-generated method stub
    super.onCreate(Dab);
    setContentView(R.layout.splash);
    ourSong = MediaPlayer.create(Splash.this, R.raw.nodebeat);
    ourSong.start();
    Thread timer = new Thread(){
        public void run(){   //framework to start a new thread
            try{
                sleep(5000);
            }catch(InterruptedException e){
                e.printStackTrace();
            }finally{
                Intent openStart = new Intent("com.example.add.MENU");
                startActivity(openStart);
            }
        }
    };
    timer.start();
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    ourSong.release();
    finish();
}

所以请帮助我是 android 应用程序开发的新手,我在这里感到震惊。Logcat 日志的链接:- https://docs.google.com/file/d/0BxLaXhL-q50-MHlhUW93SmxNT0U/edit调试日志 https://docs.google.com/file/d/0BxLaXhL-q50-b1pzbVpIcVNQR2s/编辑错误日志

谢谢。

4

2 回答 2

1

您对尝试启动的内容使用了错误的意图过滤器。所以要么改变

 <action android:name="android.intent.action.MENU" />

 <action android:name="com.example.add.MENU" />

让一切都匹配。

或者在代码中更改您的调用,使其成为:

Intent openStart = new Intent("android.intent.action.MENU");

您应该阅读有关Intent Filters的信息。

您也可以使用显式 Intent,因为您没有导出此 Activity 并且您知道它的名称,所以我认为不需要 Intent 过滤器。

Intent openStart = new Intent(Splash.this, Menu.class);
startActivity(openStart);
于 2013-01-31T16:30:06.680 回答
0

下面两个(1 和 2)地方的意图动作应该是相同的,但不是。使它们相同。

   <intent-filter>
        <action android:name="android.intent.action.MENU" />// (1)

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

 Intent openStart = new Intent("com.example.add.MENU"); (2)
于 2013-01-31T16:31:46.277 回答