Wenn ich in AndroidStudio ein Projekt mit einer leeren Aktivität erstelle, wird der folgende Code in der MainActivity.java
Datei angezeigt:
package my.company.my_proj;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Dabei wird eine kryptische Klasse mit dem Namen R
verwendet. Was ist der Zweck dieser Klasse R
?
android.R
?Was ist R: Es ist nichts sehr Geheimnisvolles an R. Es ist nur eine Klasse, die viele statische Unterklassen hat, sie in Eclipse öffnet und einen Blick darauf wirft (es ist unter gen /).
Jedes Mitglied dieser Klasse ist eines von zwei Dingen: 1) statische Endklassen oder 2) statische Endzahlen, die in Bezug auf die anderen Mitglieder ihrer Klasse eindeutig sind.
Warum ist es so kryptisch: Es ist leicht zu verwirren, weil R automatisch von ant generiert wird. Es ist kryptisch, weil Sie es nicht manuell "berühren" sollen (natürlich können Sie es, aber Ihre Änderungen werden bei der Regeneration automatisch gelöscht). Es ist zusätzlich kryptisch, weil Eclipse manchmal automatisch Standard-R-Dateien von Androiden importiert (wie in den obigen Antworten beschrieben).
Warum ist es immer das erste, das nicht gelöst werden kann: R folgt genau den Regeln von Java-Klassen und -Paketen. Es gibt nichts Besonderes daran, wie sich R beim Import verhält. R wird automatisch in das Paket eingefügt, das durch den Paketeintrag in Ihrer Manifestdatei angegeben wird
Um zu sehen, zu welchem Paket Ihre R-Datei gehört, öffnen Sie einfach den Ordner gen / in Eclipse (Paketansicht). Dort wird ein Paket aufgelistet, das den Namen hat, den Sie in Ihrem Manifest angegeben haben. Wenn Sie versuchen, es zu löschen, wird es wieder angezeigt, wenn alle Ihre Ressourcen den korrekten Namensregeln und alle Ihre XML-Dateien den korrekten XML-Regeln folgen und wenn die automatische Erstellung in Eclipse aktiviert ist.
Der Schlüssel zum Verständnis der R-Datei besteht darin, zu erkennen, dass sie sich im selben Paket wie die anderen Klassen befindet, obwohl sie sich in einem anderen Verzeichnis befindet als andere Dateien, die zu Ihrem "Haupt" -Paket gehören. Nachdem Sie dies verstanden und die Syntax und Benennung von Ressourcendateien verstanden haben, ist die Fehlerbehebung bei Problemen mit R einfach.
quelle
R ist der Name für Ihre Ressourcen. Jede Ressource, auf die Sie zugreifen,
R.$FOLDER.$RESOURCE
oder etwas sehr Ähnliches.Wenn dies nicht behoben werden kann, stellen Sie sicher, dass der Pfad korrekt ist und die referenzierte Ressource vorhanden ist (Groß- und Kleinschreibung beachten; Erweiterung einschließen).
Der verwirrende Teil (für mich jedenfalls) ist auch, dass es zwei verschiedene
R
gibt . Wenn Sie viele Fehler "Kann nicht behoben werden" erhalten, versuchen Sie zu sehen, was Sie importieren. Versuchen Sie es zu ändern oder zu entfernen. Oder Sie können versuchen, Ihr Projekt zu bereinigen (WARNUNG: Manchmal macht das die Dinge schlimmer als sie bereits sind).quelle
R
Datei. Hin und wieder verfehlt es den Schritt "Regenerieren" und lässt mich ohne (oder mit einem leeren) SchrittR
undR
ist so programmiert, dass alle von Hand vorgenommenen Änderungen automatisch rückgängig gemacht werden.Android R.java ist eine automatisch generierte Datei von AAPT (Android Asset Packaging Tool), die Ressourcen-IDs für alle Ressourcen von res / directory enthält. Wenn Sie eine Komponente in der Datei activity_main.xml erstellen, wird die ID für die entsprechende Komponente automatisch in dieser Datei erstellt. Diese ID kann in der Aktivitätsquelldatei verwendet werden, um eine Aktion für die Komponente auszuführen.
quelle