从Android库项目覆盖活动
我有一个Android项目。现在我需要创建该项目的第二版。从Android库项目覆盖活动
会有什么不同:
项目的新版本应该在活动中一个不同的内容。
我正在考虑创建一个库项目和两个新项目(project1
和project2
),它将使用库项目,但我不太了解如何设置它。
我应该只是将原始项目转换成库,然后创建两个新项目然后然后什么?如何使project1
使用activity1
和project2
在同一个地方使用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?
问题是如何在MainActivity.java中启动子活动。 您需要'手动'确保启动正确的ChildActivity。
这样做的一种方法是为意图明确设置组件。 Context.getPackageName()函数返回您正在运行的应用程序的包名,您可以使用它来标识要启动的ChildActivity的“正确实例”。在MainActivity.java试试这个在您的的onClick()处理:
Intent intent = new Intent();
intent.setComponent(new ComponentName(getPackageName(), getPackageName() + ".ChildActivity"));
startActivity(intent);
工程就像一个魅力。 旧的答案,但我找不到更好的3年以上。 – Carsten 2016-01-07 08:50:14
你的做法是正确的。
- 创建您的图书馆项目。
- 创建一个新项目,创建您需要的活动并添加您的库项目。
- 将Android项目中的AndroidManifest.xml复制到您的新项目中,但指出与项目活动不同的活动,而不是指向库项目中的活动。
请看看编辑。 – 2012-07-27 08:29:29
我的意思是,我的图书馆项目不会意识到其他项目中的活动。我怎样才能把这个逻辑放在图书馆项目中? – 2012-07-27 08:50:10
快速修复我的意思是将MyActivity类复制到新项目中,并将新项目(在清单中)引用到新的MyActivity类中,而不是在库中。该库仍然会读取旧的MyActivity类。 – Slickelito 2012-07-27 09:22:54
您正处在正确的轨道上。设置一个库项目和两个包含lib项目的标准android项目。 请记住将您的清单活动复制到新项目中。当你想分开活动时,你可以扩展你的lib项目中的活动。 project1:MyActivty扩展Activit1 ..项目2 MyActivit
请看看编辑。 – 2012-07-27 08:29:43
一个quckfix可以代替启动意图膨胀的活动。 :) – Slickelito 2012-07-27 08:36:29
@Slickelito,我不明白。 – 2012-07-27 08:48:28
你使用Maven? – hennr 2012-07-27 08:00:00
啊,不知道。我猜不行,只是基本的Eclipse Android模板。 – 2012-07-27 08:05:30
您是否正在尝试创建同一个Android应用的两个版本? – 2012-07-27 08:09:57