2010-10-14 5 views
29

Die App, die ich entwickle, hat viele Aktivitäten, die in sieben Java-Paketen organisiert sind. Ursprünglich habe ich alle Codierungen und Zeug für jede Gruppe von Aktivitäten in einem Java-Paket als verschiedene Projekte geschrieben.Android: Einbinden mehrerer Java-Pakete zur Manifestation

Jetzt bin ich an dem Punkt, wo ich alle Pakete in einem Projekt zusammenfügen möchte. Wenn ich dem Ordner src ein neues Paket hinzufüge, erhalte ich einen Fehler für alle meine R.id. * -Werte ("R kann nicht aufgelöst werden").

Mein Instinkt sagt mir, dass es etwas Phantasievolles gibt, das ich in das Projektmanifest schreiben muss, aber ich kann keine Ressource online finden, um mir zu sagen, wie.

. (Anmerkung: Ich habe this und this und ich kann immer noch nicht herausfinden, wie zusätzliche Pakete zu meinem Projekt hinzuzufügen)

+0

Versuchen Sie einen bereinigter Build zu tun?Und aktualisieren Sie den Include-Pfad für Ihre R-Datei in der Klasse, die Sie hinzugefügt haben? Wenn Sie die Aktivität zuvor in einem anderen Projekt hatten, befand sich die R-Datei wahrscheinlich auch an einem anderen Speicherort. –

+2

Ich bin zu Project> Clean gegangen ... ein halbes Dutzend Mal in der Hoffnung, dass es einfach funktionieren würde ... kein Glück. – HappyGeisha

+0

Was ist mit dem Include-Pfad für R? Ist es richtig? –

Antwort

36

Vergewissern Sie sich, dass die Import-Anweisung am Anfang der Aktivität des richtigen verweist R-Datei. Jedes Projekt hat seine eigene R-Datei. Wenn Sie also eine Aktivität von einem Projekt in ein anderes kopieren, versucht es immer noch, auf die R-Datei aus dem alten Projekt zu verweisen.

Sie benötigen keine explizite Aufnahme verschiedener Pakete in das Manifest. Um Aktivitäten von zwei verschiedenen Paketen zu umfassen, sagen:

com.example.package1.Activity1 
com.example.package2.Activity2 

Sie folgendes tun:

<manifest package="com.example" . . . > 
    <application . . .> 
    <activity android:name=".package1.Activity1" . . . /> 
    <activity android:name=".package2.Activity2" . . . /> 
    </application> 
</manifest> 
+0

Oh Mayra, du warst so hilfreich !! Danke noch einmal! – HappyGeisha

+0

Ja funktioniert der Code, aber Android gibt immer noch rote Fehlermarkierungen (noch kompilieren und ausführen) – StarWind0

14

Android automatisch die Klasse erstellt namens "R" in der in Ihrer App Manifest erklärt Paket. Wenn sich alle Klassen in diesem Paket befinden, müssen Sie nie explizit "R" importieren. Wenn Sie jedoch Klassen in anderen Paketen haben, werden sie es nicht standardmäßig sehen und Sie werden

import <app-package>.R; 

oder

import <app-package>.*; 

(ersetzt den tatsächlichen Namen für <app-package> natürlich) enthalten müssen.

Wenn Sie in Ihrer App library projects einschließen, können sie auf ihre eigenen "R" -Klassen verweisen, die innerhalb ihre Home-Pakete generiert werden. Wenn Sie über mehrere unabhängige Aktivitäten verfügen, die zu einer endgültigen App gebündelt werden müssen, sollten Sie ernsthaft in Betracht ziehen, Bibliotheksprojekte zu verwenden, statt die Dinge manuell zusammenzuführen. Es könnte Ihnen das Leben viel leichter machen.

+0

Ich habe versucht, Bibliotheksprojekte in der Vergangenheit zu verwenden, und es hat nicht für mich funktioniert. Dies ist so, weil alle meine Aktivitäten sich gegenseitig referenzieren und sobald ich ein Projekt zu einer Bibliothek gemacht habe, wurde das Referenzieren zu einem direktionalen ... Ich bin ein Programmier-Noob, also machte das wahrscheinlich keinen Sinn, aber danke für deine Hilfe sowieso :) – HappyGeisha

+0

Nein, das ist ein häufiges Problem mit Bibliotheken - sie müssen ziemlich in sich geschlossen sein, was ihre Nützlichkeit einschränkt. Ich dachte nur, dass es in diesem Fall nützlich sein könnte, da du gesagt hast, du hättest jede Aktivität isoliert entwickelt und somit dachte ich, sie wären bereits in sich abgeschlossen. Wenn sie dein Leben nicht einfacher machen, gibt es keinen Prozentsatz, sie zu benutzen. – beekeeper

0

Überprüfen Sie, ob das Layout -> main.xml Datei korrekt ist und beinhaltet die android:id="@+id/whateverIdHasCausedYouTheError"

Die R.java Datei wird dann aktualisiert werden, um die id .. und bam aufzunehmen, sollten Sie Ihre Fehler verschwinden.

1

Das Problem kann auch dann bestehen bleiben, wenn wir die Manifestdatei ändern. Um es zu vermeiden, müssen wir ein import com.example.R; in allen unseren Klassen hinzufügen.

Beispiel: MainActivity.class in package2

pakage com.example.package2.Activity2 
import com.example.R; 

(TestActivity.class in package1)

pakage com.example.package1.Activity1 
import com.example.R; 
Verwandte Themen