在另一个包中调用活动

时间:2013-09-19 19:07:09

标签: android

我一直在阅读其他一些关于在另一个程序包中调用活动的帖子,看起来我做得对,但仍然从我的主要活动中收到此错误:

AndroidTestProj1/src/com/testing/androidtest/TestProj1Activity.java:7: error: package com.testing.androidtest2 does not exist

我在清单中宣布了其他活动,但仍然无法找到它。

====================================

这是AndroidTestProj1: 的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.testing.androidtest"
  android:versionCode="1"
  android:versionName="1.0">
<application android:label="@string/app_name" >
   <activity android:name="TestProj1Activity"
              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.testing.androidtest2.TestProj2Activity"
        android:label="@string/app2_name" >
    </activity>
</application>

和AndroidTestProj1 / src / com / testing / androidtest / TestProj1Activity.java:

    package com.testing.androidtest;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;

import com.testing.androidtest2.TestProj2Activity;

public class TestProj1Activity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    // do some stuff here then call other package activity

    Intent i = new Intent(this, TestProj2Activity.class);
    startActivity(i);
    }
}

这是AndroidTestProj2:AndroidManifest.xml:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.testing.androidtest2"
  android:versionCode="1"
  android:versionName="1.0">
<application android:label="@string/app_name" >
    <activity android:name="TestProj2Activity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

和AndroidTestProj2 / src / com / testing / androidtest2 / TestProj2Activity.java:

package com.testing.androidtest2;

import android.app.Activity;
import android.os.Bundle;

import com.testing.androidtest2.Helper;

public class TestProj2Activity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    private boolean somekeyvalue = Helper.getSomeKeyValue();

    // do stuff with keyvalue

}

和AndroidTestProj2 / src / com / testing / androidtest2 / Helper.java:

package com.testing.androidtest2;

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

public class Helper {

    private static final String SOMEKEY = "somekey";

    private static SharedPreferences prefs;

        public static void init(Context context)
        {
                prefs = PreferenceManager.getDefaultSharedPreferences(context);
                initialize();
        }

        private static void initialize()
        {
                SharedPreferences.Editor editor = prefs.edit();

                if (!prefs.contains(SOMEKEY)) editor.putBoolean(SOMEKEY, false);

                editor.commit();
        }

        public static boolean getSomeKeyValue()
        {
                return prefs.getBoolean(SOMEKEY, true);
        }

}

2 个答案:

答案 0 :(得分:1)

你在正常场景中做的是同样的事情,但是稍微调整一下。在FirstActivity中,您希望从其他包中调用其他活动,请输入以下代码

Intent i = new Intent(); 

i.setClassName("com.CodeArt.finalactivity", "com.CodeArt.finalactivity.FinalActivity");

startActivity(i);

此处com.CodeArt.finalactivity是包名称,com.CodeArt.finalactivity.FinalActivity是完整的班级名称。

现在转到FirstActivity的AndroidManifest.xml并添加以下行 应用程序代码中的activity android:name=”com.CodeArt.finalactivity.FinalActivity“。

它会正常工作。

答案 1 :(得分:0)

只是一个假设,但您已经将第二个项目添加到当前项目中吗?否则,即使您在清单中声明它们,也无法联系到它的类。 要了解如何实现这一目标,您可以查看here