Actividad inicial de Android-Library-Project

Después de una larga búsqueda no pude encontrar ninguna solución adecuada. Tengo un proyecto de Android-Biblioteca con casi todo el código para la aplicación. De la actividad principal en el proyecto de la biblioteca comienzo un intento a explícito Actividad A. En mi proyecto derivado, que utiliza el proyecto de la biblioteca, he extendido esta actividad A y agregado un nuevo código. El problema es que la Superclase de Actividad A responderá y no la clase derivada.

En el manifiesto del nuevo Proyecto que utiliza el proyecto de biblioteca he declarado la nueva Actividad con el nuevo paquete.

Esta es la llamada de intención del proyecto de la biblioteca:

Intent i = new Intent(getApplicationContext(), AndroidActivity.class); startActivity(i); 

Aquí está la clase derivada de AndroidActivity:

 public class AndroidActivity extends de.app.library.activities.AndroidActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... 

No puedo llegar al método onCreate

El Manifiesto del Proyecto de la Biblioteca:

 <?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> 

Y aquí el Manifiesto del nuevo Proyecto:

 <?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" /> 

Así que tengo:

 de.app.library.activities.AndroidActivity and de.app.free.activities.AndroidActivity 

No quería hacer que muchos cambios en el proyecto de biblioteca beacuase un tercer proyecto debe utilizar el código existente con la intacta AndroidActivity

TODAS otras cosas funciona bien para mí. Por ejemplo, los diseños cambiados se utilizan desde el nuevo proyecto.

¿Cómo puedo manejar ese problema? Tal vez cambios en el Manifiesto del nuevo proyecto en el que declaro, que la nueva actividad debería ser llamada en lugar de la superclase?

¡Gracias por adelantado!

Cuando lo hace en su proyecto de biblioteca

  Intent i = new Intent(getApplicationContext(), AndroidActivity.class); 

AndroidActivity refiere a AndroidActivity del proyecto de biblioteca: Un proyecto no conoce otros proyectos externos a menos que los incluya como una biblioteca. Sólo comprueba tus importaciones, importas AndroidActivity e instruye a Android para que funcione.

Que por cierto es obvio, sería un mal patrón de diseño si el proyecto de la biblioteca tuviera que saber sobre los proyectos derivados

Una solución fácil es anular el lanzamiento de la actividad en el proyecto derivado, algo así:

Proyecto Libary Actividad:

 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 . . } 

Actividad de tu proyecto derivado:

 @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 . . } 

Por lo tanto, cuando llama a runMyActivity () desde cualquier lugar, ejecutará la función overriden (siempre que la actividad de inicio amplíe la actividad del proyecto de biblioteca y reemplace ese método). Y en el contexto de la función overriden, AndroidActivity.class será su actividad derivada (o la otra, puede importar cualquiera de ellas porque aquí tiene acceso a las actividades derivadas y al proyecto de la biblioteca).

En su nuevo proyecto, podría utilizar un nombre diferente, en lugar de AndroidActivity. Si no desea hacerlo, el segundo nombre completo de AndroidActivity en el archivo de manifiesto debe solucionar su problema. Usted es quizá estropeando para arriba con paquetes un poco, en alguna parte.

 Actividad android: name = "de.app.library.activities.AndroidActivity"

debiera ser

 Actividad android: name = "de.app.free.activities.AndroidActivity"

Quiero decir, la AndroidActivity. De alguna manera, estás recogiendo la clase de actividad equivocada del paquete equivocado.

  • Error de proyecto de Android Studio Library
  • Construir variantes en Gradle para un proyecto de biblioteca en Android
  • Módulo de importación al proyecto gradle en android studio 0.4.0v
  • Bibliotecas de código abierto de Android? ¿Vistas reutilizables, ViewGroups, adaptadores etc?
  • Cómo ignorar los lanzadores de AndroidManifest.xml de un proyecto de biblioteca
  • Cómo hacer referencia a un activo en un proyecto de biblioteca
  • Cómo convertir un proyecto de biblioteca de Android en un JAR externo?
  • La aplicación basada en biblioteca instala 2 archivos APK, no uno - ¿Por qué?
  • Después de extraer el código del widget lib ya no funciona
  • Cómo construir jar para el proyecto de la biblioteca de Android en Intellij Idea sin contenido innecesario
  • ¿Cómo ejecutar pruebas de unidad para proyectos de biblioteca de Xamarin (iOS y Android)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.