如何在android中启动新活动

时间:2014-03-24 16:11:55

标签: java android android-intent

我想在点击一个按钮时启动一个名为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>

5 个答案:

答案 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()会阻止任何进一步的操作,直到完成为止。