从Android的库项目覆盖活动(Override Activity from Android Li

2019-07-30 15:25发布

我有一个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,点击按钮,我想从ChildActivity StandAloneProject(而不是从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?

Answer 1:

问题是你如何开始MainActivity.java子活动。 你需要“手动”确保正确ChildActivity开始。

要做到这一点的方法之一是明确地设置组件的意图。 该Context.getPackageName()函数返回您在运行的应用程序的软件包名称,你可以用这个来识别“正确的实例” ChildActivity的要启动。 在MainActivity.java您的onClick()处理试试这个:

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


Answer 2:

你的做法是正确的。

  1. 创建库项目。
  2. 创建一个新项目,创建你所需要的情况和您的库项目添加到它。
  3. 从资料库中的项目复制到的AndroidManifest.xml您的新项目,但指出这一点不同的项目活动,而不是在库项目的活动的活动。


Answer 3:

你是在正确的轨道上。 建立一个库项目,其中包括LIB项目中的两个标准的Android项目。 请记住,您的清单activitys复制到新的项目。 当你想在activitys分开,你可以从你的lib项目扩展的。 PROJECT1:MyActivty延伸Activit1 ..项目2 MyActivit



文章来源: Override Activity from Android Library project