2017-12-12 1 views
0

Dies ist mehr eine Java-Anfängerfrage, aber sie ist mit einem Android-Code verbunden.Warum muss ich nicht die android "R" -Klasse importieren?

Hier ist meine MainActivity.java:

package tld.mydomain.buttonclickcounter; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

    private EditText myEditText; 
    private Button myButton; 
    private TextView myTextView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     myEditText = (EditText) findViewById(R.id.myEditText); 
     myButton = (Button) findViewById(R.id.myButton); 
     myTextView = (TextView) findViewById(R.id.myTextView); 
    } 
} 

Wie Sie sehen, ich bin die R-Klasse, ohne sie importieren zu müssen. Wie kann es möglich sein? Ich glaubte, dass in Java alles importiert werden musste, um verwendet zu werden. Wie kann der Java-Compiler wissen, wo er die Klasse bekommt? Ich benutze Android Studio.

+3

Weil es im gleichen Paket ist. –

+3

Ist die 'R'-Klasse nicht im selben Paket wie Ihre' MainActivity'-Klasse? –

+0

Weil R innerhalb des 'default'-Paketes ist, als ob eine Klasse im src root wäre. – Sombriks

Antwort

2

Es ist, weil Ihr MainActivity.java innerhalb des Paketnamen sind, die die gleiche wie Paketnamen in AndroidManifest.xml deklariert ist:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="tld.mydomain.buttonclickcounter"> 

</manifest> 

Die R.java basierend auf dem Paketnamen generiert werden in AndroidManifest.xml. Also, wenn Sie anderes Paket mit Namen sind wie tld.mydomain:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="tld.mydomain"> 

</manifest> 

Sie dann müssen die R.java mit tld.mydomain.R importieren.

1

Da R.java und MainActivity.java sind innerhalb tld.mydomain.buttonclickcounter Paket und Ihr Paket wird in AndroidManifest.xml erwähnt. Um zu testen, ob R.java in tld.mydomain.buttonclickcounter Paket ist, können Sie Ihre apk dekompilieren.

Verwandte Themen