2017-02-02 3 views
0

Ich arbeite an einem kleinen Android Studio (Version 2.2.3) -Anwendung.Android Studio ist es normal für R.id auf alle Komponenten zugreifen

Nach dem Hinzufügen einer zweiten Aktivität mit vielen Komponenten habe ich festgestellt, dass, wenn ich R.id in der ersten Aktivität eingibt, schlägt die automatische Vervollständigung mir die Komponenten aus der zweiten Aktivität vor.

Ist das normal?

Screenshot resuming my problem

Und hier ein funktionierendes Beispiel für mein Problem ist (habe ich den Screenshot von ihm), der Einfachheit halber Ich habe gerade zwei leere Aktivitäten jeweils mit einer Taste.

AndroidManifest.xml:

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

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <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=".Main2Activity"></activity> 
</application> 

MainActivity.java:

package com.example.myapplication; 

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


public class MainActivity extends AppCompatActivity { 
    private Button btMain1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //Here is the issue, 
     //autocompletion of R.id. shows every layout and their composents 
     btMain1 = (Button) findViewById(R.id.); 
    } 
} 

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.myapplication.MainActivity"> 


    <Button 
     android:text="Button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="198dp" 
     android:id="@+id/btMain1" /> 
</RelativeLayout> 

Main2Activity.java:

package com.example.myapplication; 

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

public class Main2Activity extends AppCompatActivity { 
    private Button btMain2; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main2); 
    } 
} 

activity_main2.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.myapplication.Main2Activity"> 

    <Button 
     android:text="Button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="198dp" 
     android:id="@+id/btMain2" /> 
</RelativeLayout> 
+1

mm Was ist die Frage? Es ist normal? oder nicht? ist das, was du fragst? –

+0

Was ist die Frage? – parik

+0

Was ist die Frage? – Developer

Antwort

2

R.java ist eine generierte Datei, die alle Ressourcenbezeichner für Ihre Anwendung enthält.

R.id ist nur eine Unterklasse. Sie würden auch R.layout auto-complete, zum Beispiel auf setContentView

Die Auto-Vervollständigung wird alles ziehen, weil es keine Trennung innerhalb von Aktivitäten, Fragmente, Dienstleistungen usw.

(Schnipsel von mir)

/* AUTO-GENERATED FILE. DO NOT MODIFY. 
* 
* This class was automatically generated by the 
* aapt tool from the resource data it found. It 
* should not be modified by hand. 
*/ 

public final class R { 

    // ... 

    public static final class id { 
     public static final int action0=0x7f0e0090; 
     public static final int action_bar=0x7f0e0060; 
     public static final int action_bar_activity_content=0x7f0e0000; 
     public static final int action_bar_container=0x7f0e005f; 
     public static final int action_bar_root=0x7f0e005b; 
     public static final int action_bar_spinner=0x7f0e0001; 
     public static final int action_bar_subtitle=0x7f0e0041; 
+0

mm danke, werde sehen, danke nochmal für das Kommentieren Sie sind ein netter Kerl –

4

Ja. R.id enthält jede einzelne ID, die in Ihrer App definiert ist. Jede ID ist nur eine Zahl und viele von ihnen werden nicht in einer bestimmten Aktivität oder einem Layout verwendet.

1

Ihre Frage wurde so gestellt, noch bevor ich dachte, Android zu lernen. Android: What is R? Why is it so Cryptic?

R ist eine Klasse, die Definitionen für alle Ressourcen eines bestimmten Anwendungspaket enthält. Es befindet sich im Namensraum des Anwendungspakets.

Zum Beispiel, wenn Sie in Ihrem Manifest Ihrer Paketnamen sagen com.foo.bar, eine R Klasse erzeugt werden mit den Symbolen aller Ihre Ressourcen in com.foo.bar.R.

Es gibt im Allgemeinen zweiR Klassen werden Sie beschäftigen sich mit

  1. Die Framework-Ressourcen in android.R und
  2. Ihre eigene in Ihrem Namensraum

Es gestattet R denn das steht für R esources, und es gibt keine Punkt in Menschen etwas etwas länger zu machen, vor allem, da es gemeinsam ist mit am Ende ziemlich lange Symbolnamen nach, dass verursachen eine angemessene Menge von Zeilenumbruch.

Jetzt in meinen Worten, Wenn wir unsere eigenen Ressourcen verweisen, die Sie erstellt haben, mostaly verwenden wir R. So Android Studio uns Vorschläge gibt auf dieser Grundlage.

Sie sollten auch bemerkt haben, android.R, die für die Nutzung von Ressourcen in das Betriebssystem integriert ist.

Also ja, Sie erhalten Vorschläge basierend darauf, R Sie verwenden, und jetzt sollten Sie Vorschläge basierend darauf wissen R ist nicht für eine bestimmte Aktivität oder Ansicht, das ist der Grund, dass es ihnen allen vorschlägt.

Auch gibt es eine article, können Sie mehr Wissen über R.java, android.R und Ressourcen.

+1

Ich wundere mich nicht, warum R auf diese Weise tho benannt wird. –

+0

@L. Faros ja, wenn du ein bisschen surfen kannst, kannst du viele Details über R-basierte Themen bekommen, die es wert sind, sie zu lesen :) –

+1

@ L.Faros 'R' für ** R ** esources. Kein Grund, wie 'getResources(). GetId (" name ")' –

Verwandte Themen