我正在关注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/edit错误日志
感谢。
答案 0 :(得分: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。
你也可以使用explict意图,因为你没有导出这个Activity而你知道它的名字,我认为不需要意图过滤器。
Intent openStart = new Intent(Splash.this, Menu.class);
startActivity(openStart);
答案 1 :(得分: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)