android - 从 Android 库项目覆盖 Activity

标签 android android-activity android-library

我有一个 Android 项目。现在我需要创建该项目的第二版。

不同之处:

新版本的项目应该在其中一个 Activity 中有不同的内容。

我正在考虑创建一个库项目和两个将使用库项目的新项目(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>

主 Activity .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(而不是 MainProject)启动 ChildActivity。

我得到的:

当我启动 StandAloneProject 时,我从 MainProject 看到 MainActivity,单击按钮并获得:

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 中启动子 Activity 。 您需要“手动”确保启动了正确的 ChildActivity。

实现此目的的一种方法是为 Intent 显式设置组件。 Context.getPackageName() 函数返回您正在运行的应用程序的包名称,您可以使用它来识别您要启动的 ChildActivity 的“正确实例”。在 MainActivity.java 的 onClick() 处理程序中试试这个:

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

关于android - 从 Android 库项目覆盖 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11683697/

相关文章:

android - 用opencv全屏显示图像

android - 如何在每个项目的 ListView 中实现简单的类似按钮

Android: Activity 动画不起作用

java - 无法将字符串值从一个 java 类传递到另一类

android - Android 库是否需要 list 、app_name、图标?

android - 我需要增加库模块的版本代码吗?

Android软键盘调整背景图片大小(网站)

android - 为什么我不能在 Android 中使用 @Override onDraw

java - 如何在Android Studio中设置Android Library模块并被多个项目引用?

android - 以编程方式从 Activity/服务/接收器更新小部件