2012-07-27 57 views
3

我有一个Android项目。现在我需要创建该项目的第二版。从Android库项目覆盖活动

会有什么不同:

项目的新版本应该在活动中一个不同的内容。

我正在考虑创建一个库项目和两个新项目(project1project2),它将使用库项目,但我不太了解如何设置它。

我应该只是将原始项目转换成库,然后创建两个新项目然后然后什么?如何使project1使用activity1project2在同一个地方使用activity2

编辑

我所成立至今:

MainProject,图书馆具有MainActivity.java和ChildActivity.java


AndroidManifest.xml中

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.mainproject"> 
    <application> 
     <activity 
      android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".ChildActivity"> 
     </activity> 
    </application> 
</manifest> 

MainActivity.java

public class MainActivity extends Activity { 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 

      ((Button)findViewById(R.id.button1)).setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(MainActivity.this, ChildActivity.class); 
        startActivity(intent); 
       } 
      }); 
     } 
} 

StandAloneProject:它只是ChildActivity.java


<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.standaloneproject"> 
    <application> 
     <activity 
      android:name="com.example.mainproject.MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".ChildActivity" > 
     </activity> 
    </application> 
</manifest> 

我想到:

当我启动StandAloneProject,点击按钮,我想从StandAloneProject的ChildActivity(不是来自MainProject )即将启动。

我得到什么:

当我启动StandAloneProject,我看到MainActivity从MainProject,点击按钮,得到:

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.standaloneproject/com.example.mainproject.ChildActivity}; have you declared this activity in your AndroidManifest.xml? 
+0

你使用Maven? – hennr 2012-07-27 08:00:00

+0

啊,不知道。我猜不行,只是基本的Eclipse Android模板。 – 2012-07-27 08:05:30

+0

您是否正在尝试创建同一个Android应用的两个版本? – 2012-07-27 08:09:57

回答

5

问题是如何在MainActivity.java中启动子活动。 您需要'手动'确保启动正确的ChildActivity。

这样做的一种方法是为意图明确设置组件。 Context.getPackageName()函数返回您正在运行的应用程序的包名,您可以使用它来标识要启动的ChildActivity的“正确实例”。在MainActivity.java试试这个在您的的onClick()处理:

Intent intent = new Intent();  
    intent.setComponent(new ComponentName(getPackageName(), getPackageName() + ".ChildActivity")); 
    startActivity(intent); 
+0

工程就像一个魅力。 旧的答案,但我找不到更好的3年以上。 – Carsten 2016-01-07 08:50:14

3

你的做法是正确的。

  1. 创建您的图书馆项目。
  2. 创建一个新项目,创建您需要的活动并添加您的库项目。
  3. 将Android项目中的AndroidManifest.xml复制到您的新项目中,但指出与项目活动不同的活动,而不是指向库项目中的活动。
+0

请看看编辑。 – 2012-07-27 08:29:29

+0

我的意思是,我的图书馆项目不会意识到其他项目中的活动。我怎样才能把这个逻辑放在图书馆项目中? – 2012-07-27 08:50:10

+0

快速修复我的意思是将MyActivity类复制到新项目中,并将新项目(在清单中)引用到新的MyActivity类中,而不是在库中。该库仍然会读取旧的MyActivity类。 – Slickelito 2012-07-27 09:22:54

1

您正处在正确的轨道上。设置一个库项目和两个包含lib项目的标准android项目。 请记住将您的清单活动复制到新项目中。当你想分开活动时,你可以扩展你的lib项目中的活动。 project1:MyActivty扩展Activit1 ..项目2 MyActivit

+0

请看看编辑。 – 2012-07-27 08:29:43

+0

一个quckfix可以代替启动意图膨胀的活动。 :) – Slickelito 2012-07-27 08:36:29

+0

@Slickelito,我不明白。 – 2012-07-27 08:48:28