我正在按照教程,我遇到了错误;根据教程,下面的代码必须工作并调用activity
StartingPoint
。但事实并非如此。
我简化了代码,只是调用activity
无论如何,它都在工作,所以我只是复制这两个。你能检查一下吗?
不工作:
public class Menu extends ListActivity{
String classes[] = { "StartingPoint", "example1", "example2"
, "example3", "example4", "example5", "example6"};
@Override
public 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.thenewboston.travis." + cheese);
Intent ourIntent = new Intent(Menu.this,ourClass);
startActivity(ourIntent);
} catch (ClassNotFoundException e){
e.printStackTrace();
}
}
}
这段代码工作正常,所以项目的其他部分就可以了:
public class Menu extends ListActivity{
String classes[] = { "StartingPoint", "example1", "example2"
, "example3", "example4", "example5", "example6"};
@Override
public 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);
Intent ourIntent = new Intent("com.thenewboston.travis.STARTINGPOINT");
startActivity(ourIntent);
}
}
我有一个P.S.这里也 :)
在第二个代码中,我使用大写'STARTINGPOINT'来调用activity
,但是,在原始教程中他使用了'StartingPoint',并将其附加到类的名称,它是如何工作的?
的AndroidManifest.xml
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<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:name=".StartingPoint"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.thenewboston.travis.STARTINGPOINT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".Menu"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.thenewboston.travis.MENU" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
感谢。 :)
答案 0 :(得分:1)
第一个示例使用反射来检索表示您要启动的Activity
的类对象。在第二个中,您正在使用操作来启动下一个活动。打开AndroidManifest.xml
并查找com.thenewboston.travis.STARTINGPOINT
,您会发现与Activity
相关联的操作
修改
"example1", "example2"
, "example3", "example4", "example5", "example6"
必须是Activitiy
子类,必须在AndroidManifest.xml文件中声明
答案 1 :(得分:0)
尝试使用Intent
SetClass():
Intent intent = new Intent();
intent.setClassName(Menu.this, "com.thenewboston.travis." + cheese);
startActivity(intent);
答案 2 :(得分:0)
我发现了什么问题。我使用了不同的包名。
在项目开始时我选择<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.thenewboston"
android:versionCode="1"
android:versionName="1.0" >
直到这一点Intent
没有引起任何错误,但我想当我使用Class ourClass = Class.forName("com.thenewboston.travis." + cheese);
时
这将在包中搜索,但我的包名是com.example.thenewboston
,所以我猜它是在包内搜索一个类。
无论如何,在更改所有内容并将文件移动到新包之后,一切正常!
但是,我仍然不知道为什么我不需要使用资本STARTINGPOINT并且StartingPoint仍在工作。我有一个猜测,我认为它不是在查看清单,而是查看java文件,文件的名称很重要。无论如何,我是一个新手,我只是在猜测。 :)