我想在点击一个按钮时启动一个名为Counter
的新活动,但是我收到了一个错误,即找不到活动...所以我的代码错误在哪里:
t = new Thread(){
public void run(){
try{
sleep(5000);
}
catch (InterruptedException e){
e.printStackTrace();
}
finally{
Intent counter = new Intent("com.example.test.Counter");
startActivity(counter);
}
}
};
test.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
t.run();
}
});
这是清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.test.MainActivity"
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="com.example.test.Counter"
android:label="@string/title_activity_counter" >
</activity>
</application>
</manifest>
答案 0 :(得分:2)
Intent intent = new Intent(MyActivity.this, OtherActivity.class);
startActivity(intent);
答案 1 :(得分:1)
您可以替换此
Intent counter = new Intent("com.example.test.Counter");
startActivity(counter);
有了它,它会起作用..
Intent counter = new Intent(MainActivity.this, Counter.class);
startActivity(counter);
或让您的代码有效,您遗漏了intent-filter
<activity
android:name="com.example.test.Counter"
android:label="@string/title_activity_counter" >
<intent-filter>
<action android:name="android.intent.action.COUNTER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
如果您想以自己的方式开展活动,则应始终提供intent-filer
。
答案 2 :(得分:1)
更改此
Intent counter = new Intent("com.example.test.Counter");
startActivity(counter);
这称为隐式意图,需要意图过滤器
到
Intent counter = new Intent(MainActivity.this,Counter.class);
startActivity(counter);
这称为显式意图,不需要意图过滤器
你应该使用明确的意图,因为你有
<activity
android:name="com.example.test.Counter"
android:label="@string/title_activity_counter" >
</activity>
引用文档
显式意图指定组件以名称开头( 完全合格的班级名称)。 您通常会使用明确的意图 在您自己的应用中启动组件,因为您知道类名 您想要开始的活动或服务。例如,开始一个新的 响应用户操作或启动服务下载的活动 文件在后台。
注意:无论组件声明任何意图过滤器,都始终将显式意图传递给其目标。
编辑:
您应该在不是start()
run
答案 3 :(得分:1)
你应该t.start();
。这是启动线程的函数。
答案 4 :(得分:1)
您可能还想尝试使用以下内容替换finally
块的内容来尝试在UI线程上运行:
MyActivity.this.runOnUiThread(new Runnable() {
public void run() {
Intent counter = new Intent(MyActivity.this, Counter.class);
MyActivity.this.startActivity(counter);
}
};
正如其他人所说,使用t.start()
代替t.run()
,run()
会阻止任何进一步的操作,直到完成为止。