经过长时间的搜索,我找不到任何合适的解决方案。 我有一个 Android-Library 项目,其中包含该应用程序的几乎所有代码。从库项目中的主要 Activity 开始,我启动了一个明确的 Activity A 的 Intent 。在我使用库项目的派生项目中,我扩展了这个 Activity A 并添加了一些新代码。问题是 Activity A 的父类(super class)而不是派生类会响应。
在使用库项目的新项目的 list 中,我用新包声明了新 Activity 。
这是来自图书馆项目的 Intent 调用:
Intent i = new Intent(getApplicationContext(), AndroidActivity.class);
startActivity(i);
这是派生的 AndroidActivity 类:
public class AndroidActivity extends de.app.library.activities.AndroidActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
我无法访问 onCreate 方法
图书馆计划的 list :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.app.library"
android:versionName="1.0"
android:versionCode="1">
<uses-sdk android:minSdkVersion="4" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".activities.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=".activities.AndroidActivity" android:label="@string/act_android" />
</application>
这里是新项目的 list :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.app.free"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="4" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name="de.app.library.activities.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=".activities.LernenActivity" android:label="@string/act_lernen" />
所以我有:
de.app.library.activities.AndroidActivity and
de.app.free.activities.AndroidActivity
我不想对库项目做太多更改,因为第三个项目应该使用现有代码和未修改的 AndroidActivity
所有其他事情对我来说都很好。例如,从新项目中使用更改后的布局。
我该如何处理这个问题?也许我声明的新项目的 list 发生了变化,应该调用新 Activity 而不是父类(super class)?
提前致谢!
最佳答案
当你在你的图书馆项目中这样做时
Intent i = new Intent(getApplicationContext(), AndroidActivity.class);
AndroidActivity
引用库项目的 AndroidActivity
:一个项目不知道其他外部项目,除非您将它们作为库包含在内。只需检查您的导入,您正在导入 AndroidActivity
,并指示 Android 运行它。
很明显,如果库项目必须了解派生项目,那将是一个糟糕的设计模式
一个简单的解决方案是覆盖在派生项目上启动的 Activity ,如下所示:
图书馆项目 Activity :
public void runMyActivity() {
Intent i = new Intent(getApplicationContext(), AndroidActivity.class);
// You are on the library project, so you can refer to the activities created in it.
// the only AndroidActivity known here is the library project's
.
.
}
您派生项目的 Activity :
@Override
public void runMyActivity() {
// You are now on the derived project, so you can refer to
// the activities created in it, and also to the library project's. You
// just import the package name of the desired activity or use fully qualified
// names
Intent i1 = new Intent(getApplicationContext(), AndroidActivity.class);
// this one will use the activity in the imports
Intent i2 = new Intent(getApplicationContext(), de.app.libarary.AndroidActivity.class);
// use the activity from the library project
Intent i3 = new Intent(getApplicationContext(), de.app.free.AndroidActivity.class);
// use the activity from the derived project
.
.
}
因此,当您从任何地方调用 runMyActivity() 时,它将执行覆盖的函数(前提是启动 Activity 扩展了库项目的 Activity 并覆盖了该方法)。在覆盖的函数上下文中,AndroidActivity.class 将是您的派生 Activity (或其他 Activity ,您可以导入其中任何一个,因为在这里您可以访问派生 Activity 和库项目的 Activity )。
关于android - 从 Android-Library-Project 启动 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6974696/