So geben Sie die ID an, wenn die Verwendung in der Layout-XML-Datei enthalten ist

In meiner Layout-XML-Datei habe ich auch andere Layout-XML-Dateien (jeweils mit einer anderen Android-ID) enthalten.

<include layout="@layout/view_contact_name" android:id="+id/test1"/> <include layout="@layout/view_contact_name" android:id="+id/test2"/> 

Aber wenn ich es im Emulator betreibe und den Hierarchie-Viewer anfange, zeigt jedes Layout immer noch "NO_ID" an und in meinem Code habe ich findViewById(R.id.test1) und findViewById(R.id.test2) beide zurückgegeben Null.

  • Fehler StrictMode $ AndroidBlockGuardPolicy.onNetwork
  • Übergeben eines Parameters zum Onclick-Listener auf einer Schaltfläche in einer Listview-Zeile
  • Retrofit konvertieren Array von Objekten in GSON Error
  • Alternative Lösung für setJavaScriptEnabled (true);
  • Android java binder FEHLER BINDER TRANSAKTION?
  • Warum Emulator ist sehr langsam in Android Studio?
  • Kann mir bitte jemand mit meinem Problem helfen?

  • Installieren von ADT-Plugin in Eclipse für Android-Entwicklung
  • Verwenden Sie benutzerdefiniertes Verhalten, um mehrere "Ankerpunkte" / Positionen für CollapsingToolbar zu erstellen
  • Android entfernen Taste dynamisch
  • Änderungsdialog Thema für jeden Dialog
  • Verwenden Sie SystemUiHider, um die Navigationsleiste ausgeblendet zu halten
  • Force Parse Push-Benachrichtigungen zur Verwendung von PPNS anstelle von GCM
  • 10 Solutions collect form web for “So geben Sie die ID an, wenn die Verwendung in der Layout-XML-Datei enthalten ist”

    Geben Sie die ID im <include>

     <include layout="@layout/test" android:id="@+id/test1" /> 

    Verwenden Sie dann zwei findViewById um auf Felder im Layout zuzugreifen

     View test1View = findViewById(R.id.test1); TextView test1TextView = (TextView) test1View.findViewById(R.id.text); 

    Mit diesem Ansatz kannst du auf jedes beliebige Feld zugreifen.

    Ich habe herausgefunden, dass, wenn Sie <merge> -Tag in Ihrem Include-Layout verwenden, dann die ID von include Transfers zum Merge-Tag, die nicht reale Ansicht ist.

    So entfernen Sie entweder zusammen, oder ersetzen Sie es mit einem Layout.

    Tor Norbye schrieb :

    Das <include> -Tag ist keine wirkliche Ansicht, also findByView wird es nicht finden. Das @id-Attribut (und alle anderen Attribute, die Sie auf dem Include-Tag gesetzt haben) wird stattdessen auf das Root-Tag des enthaltenen Layouts angewendet. Also deine action.getView (R.id.included1) sollte eigentlich die <TextView> selbst sein.

    Romain Guy zeigt an, dass Sie die ID eines enthaltenen Layouts überschreiben können, indem Sie ein android:id Attribut innerhalb des <include> -Tags setzen.

     <include android:id="@+id/cell1" layout="@layout/workspace_screen" /> 

    Ja ist so, aber vorsichtig, wenn das Layout in das Include-Feld eingefügt ist, ist ein benutzerdefiniertes und Sie wollen auf das Root-Layout zugreifen. Das Layout in diesem Fall @ Layout / Test Test, ist tatsächlich in der ersten Zeile zurückgegeben.

     test test1View = (test)findViewById(R.id.test1); 

    Problem ist, dass wir versuchen, ID zu verwenden, die nicht in der aktuellen Layoutdatei deklariert ist. Anstatt wieder zu erklären, kann id einfach mit @+id/ . Wenn Sie den Original-ID-Namen über Android Studio umgestalten, ist der Refactor im beigefügten Layout.

     <include layout="@layout/toolbar"/> <TextView android:id="@+id/txt_description" android:layout_width="match_parent" android:layout_height="wrap_content" **android:layout_below="@+id/toolbar"** android:layout_marginTop="16dp" android:paddingLeft="8dp" android:paddingRight="8dp"/> 

    Ich denke, die Top-Antwort vermisst den wichtigsten Punkt und könnte Menschen in das Denken der <include/> -Tag schafft eine Ansicht, die den Include-Inhalt enthält, irreführen.

    Der Schlüsselpunkt ist, dass die Include- ID an die Root-Ansicht der Layout-Datei des Incluments übergeben wird.

    Das bedeutet:

     // activity_main.xml <include layout="@layout/somelayout" android:id="@+id/someid"/> // somelayout.xml <?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

    Wird das:

     // activity_main.xml <ImageView android:id="@+id/someid" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 
    1. Sie müssen id jeden Tag eingeben
    2. Enthaltenes Kind-Element eine neue ID setzen. Wenn du schaust, wie man neue ID erzeugt, schau dir diesen Eintrag an: https://stackoverflow.com/a/15442898/1136117

    vergleichen

     <include layout="@layout/view_contact_name" android:id="+id/test1"/> <include layout="@layout/view_contact_name" android:id="+id/test2"/> 

    mit

     <include layout="@layout/view_contact_name" android:id="@+id/test1"/> <include layout="@layout/view_contact_name" android:id="@+id/test2"/> 

    R.id.test1 und R.id.test2 erzeugt?

    Wenn du darüber sprichst, hast du entweder eine ID auf der Root-Ansicht in der mitgelieferten Layout-Datei oder auf der Include-Zeile selbst und nicht auf beiden. Beispielsweise:

     <include layout="@layout/layout1" android:id="@+id/layout1"/> 

    Layout 1 Datei

     <RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/layout2"> </RelativeLayout> 

    Das obige Beispiel ist falsch, weil man technisch zwei IDs für das gleiche Layout deklariert hat. Also, was Sie tun müssen, ist, welches Element die ID haben wird.

    Im Falle der Verwendung von <RecyclerView> finden Sie die ID von <include> indem Sie eine Instanz von aufgeblasenen Ansicht verwenden oder es wird null zurückgeben .

     public class ViewHolder extends RecyclerView.ViewHolder { private mTextView; public ViewHolder(View view) { super(view); View include_1 = view.findViewById(R.id.include_1); mTextView = (TextView) include_1.findViewById(R.id.text_id); } } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.