FindViewById funktioniert nicht für ein Include?

Ich habe ein wiegen wie:

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

Das Einrichtungslayout sieht aus wie (test.xml):

  • Unterschied zwischen ScrollView und ListView
  • ADB lokal auf Gerät verwenden (Loopback) zeigt keine Geräte an
  • SearchView getActionView zurückkehren null
  • Wie benutzt man Raumpersistenzbibliothek mit vorbesetzten Datenbanken?
  • Android-Anwendung stats auf Android-Markt Platz Netto-Nutzer / installiert
  • Wie benutzt man onAppWidgetOptionsChanged () in einem Widget?
  •  <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/outer" ... > <ImageView android:id="@+id/inner" ... /> </FrameLayout> 

    Ich kann nicht scheinen, die innere ImageView mit id = "inner" zur Laufzeit zu finden:

     ImageView iv = (ImageView)findViewById(R.id.inner); if (iv == null) { Log.e(TAG, "Not found!"); } 

    Soll ich es finden können? Es scheint, da es ein "include" benutzt, funktioniert die normale findViewById-Methode nicht.

    ———- Update —————-

    So kann ich die ID dem Include zuordnen:

     View view = findViewById(R.id.placeHolder); // ok 

    Aber ich kann keines von seinen Kindern finden von id wie:

     view.findViewById(R.id.outer); // nope view.findViewById(R.id.inner); // nope 

    Selbe wie das Original, wenn ich versuche, sie direkt zu suchen:

     findViewById(R.id.outer); // nope findViewById(R.id.inner); // nope 

    Hast du bei der Runtime einfach nur losgelassen?

    Vielen Dank

  • Android: Wie man Spiel Asset Dateien lesbar aus c ++ Code mit ndk
  • RxJava: Wie konvertiert man die Liste der Objekte in die Liste der anderen Objekte
  • Android GCM Unicode Charcters werden nicht empfangen
  • Wie kann man Barcode-Werte mit der neuen Barcode-API in Google Play Services erfassen?
  • Bedeutung des von Android GPS zurückgegebenen Genauigkeitswertes
  • Was ist der aktuelle Status der Android App Verschlüsselung?
  • 4 Solutions collect form web for “FindViewById funktioniert nicht für ein Include?”

    Versuchen Sie, das <include /> abzurufen und danach zu suchen

    Vergewissern Sie sich, dass Ihr Root die gleiche ID wie das Root-Element in der mitgelieferten XML-Datei hat

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

    Dann ruf deine "inneren" Inhalte mit:

     FrameLayout outer = (FrameLayout)findViewById(R.id.outer); ImageView iv = (ImageView)outer.findViewById(R.id.inner); if (iv == null) { Log.e(TAG, "Not found!"); } 

    Ich wollte das nur für zukünftige Googler hinzufügen, ich hatte ein ähnliches Problem, bei dem das Wurzellayout des mitgelieferten xml (in diesem Fall außen) bei der Aufruf von findViewById () null war, aber die Kinder von außen waren nicht null.

    Das Problem wurde für mich gelöst, indem ich die id-Eigenschaft des include 'view' (in diesem Fall placeHolder) beseitige. Als das weg war, konnte ich es finden, aber es ist id 🙂

    Wenn du eine ID benötigt, die dem include Item zugewiesen ist, denke ich, dass es besser ist, es in eine andere Viewgroup zu wickeln.

    Kannst du dann versuchen, das äußere Elternteil zu finden (lass es 'op' nennen) und dann op.findViewById () ausprobieren?

    Ich hatte das gleiche Problem. Ich habe herausgefunden, dass ich eine falsche Funktion mit dem gleichen Namen mit 2 Parametern wie folgt verwendet habe:

     public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); setContentView(R.layout.activity_ble_connecting); //findViewByid() => wrong } 

    Richtige Funktion mit nur einem Parameter:

      protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ble_connecting); //findViewByid() => correct } 
    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.