从Android库项目覆盖活动

Igo*_*pov 4 android android-library android-activity

我有一个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>
Run Code Online (Sandbox Code Playgroud)

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);
                }
            });
        }
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

我期待的是:

当我启动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?
Run Code Online (Sandbox Code Playgroud)

Ola*_*son 5

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

一种方法是明确设置intent的组件.Context.getPackageName()函数返回您正在运行的应用程序的包名称,您可以使用它来标识要启动的ChildActivity的"正确实例".在MainActivity.java 中的onClick()处理程序中尝试此操作:

    Intent intent = new Intent();       
    intent.setComponent(new ComponentName(getPackageName(), getPackageName() + ".ChildActivity"));
    startActivity(intent);
Run Code Online (Sandbox Code Playgroud)