W moim pliku XML układu zawarłem inny plik XML układu (każdy z innym identyfikatorem Androida).
<include layout="@layout/view_contact_name" android:id="+id/test1"/>
<include layout="@layout/view_contact_name" android:id="+id/test2"/>
Ale kiedy uruchamiam go w emulatorze i uruchamiam Hierarchy Viewer, każdy układ nadal pokazuje „NO_ID”, aw moim kodzie mam
findViewById(R.id.test1)
i findViewById(R.id.test2)
oba zwracają wartość null.
Czy ktoś może mi pomóc z moim problemem?
android
android-layout
hap497
źródło
źródło
@
symbolu.Odpowiedzi:
Określ identyfikator w
<include>
Następnie użyj dwóch,
findViewById
aby uzyskać dostęp do pól w układzieKorzystając z tego podejścia, możesz uzyskać dostęp do dowolnego pola w dowolnym pliku dołączonym.
źródło
merge
nawet w teorii, ponieważ efektem włączeniamerge
nie jest pojedynczy widok, ale ich kilka. Więc jest ok.Dowiedziałem się, że jeśli używasz
<merge>
tagu w swoim układzie include, to identyfikator transferów include do tagu scalającego, który nie jest rzeczywistym widokiem.Więc albo usuń scalanie, albo zastąp je jakimś układem.
Tor Norbye napisał :
źródło
Romain Guy wskazuje , że można zastąpić identyfikator dołączonego układu, umieszczając
android:id
atrybut wewnątrz<include>
tagu.źródło
Myślę, że najlepsza odpowiedź pomija najważniejszy punkt i może wprowadzać ludzi w błąd, myśląc, że
<include/>
tag tworzy widok, który przechowuje zawartość dołączaną.Kluczową kwestią jest to, że identyfikator include jest przekazywany do widoku głównego pliku układu dołączenia.
Co oznacza, że:
Staje się tym:
źródło
tak jest, ale uważaj, gdy układ wstawiony w pole dołączania jest niestandardowym i chcesz uzyskać dostęp do tego układu głównego. Ten układ w tym przypadku @ layout / test test jest w rzeczywistości zwracany w pierwszym wierszu.
źródło
źródło
Problem polega na tym, że próbujemy użyć identyfikatora, który nie jest zadeklarowany w bieżącym pliku układu. Zamiast ponownie deklarować, id można po prostu odnieść za pomocą
@+id/
. Jeśli zmienisz oryginalną nazwę identyfikatora za pomocą Android Studio, nastąpi to również w dołączonym układzie.źródło
W przypadku użycia
<RecyclerView>
znajdź id of<include>
przy użyciu wystąpienia zawyżonego widoku, inaczej zwróci wartość null .źródło
Jeśli ustawiłeś id na dowolny znacznik główny dołączonego układu, możesz użyć tego identyfikatora lub możesz ustawić id na dołączony układ.
Ale nie możesz ustawić id na oba, może to spowodować wyjątek.
Lub
źródło
Mówiąc o dołączaniu, masz identyfikator w widoku głównym w dołączonym pliku układu lub w samej linii dołączania, a nie w obu. Na przykład:
Plik układu 1
Powyższy przykład jest błędny, ponieważ technicznie rzecz biorąc, masz zadeklarowane dwa identyfikatory dla tego samego układu. Musisz więc wybrać, który element będzie miał identyfikator.
źródło
Wow, nie mogę uwierzyć, że to pytanie nie ma jeszcze właściwej odpowiedzi. To proste tagi są do niczego. Możesz zmienić tylko rzeczy, które zaczynają się od tego,
android:layout_
coandroid:id
nie pasuje. Więc odpowiedź brzmi: nie możesz. Przepraszam. Zamiast tego możesz utworzyć klasę, która będzie ViewGroup, która będzie zawyżać zawarte w niej widoki, a następnie dodać ją jako tag w swoim układzie, ale to wszystko.źródło