Jaka jest różnica między
@id/
i@+id/
?
W @+id/
symbolu plus +
nakazuje utworzenie nowej nazwy zasobu i dodanie do R.java
pliku, ale co z @id/
? Z dokumentacji ID
: podczas odwoływania się do zasobu Androida ID
nie potrzebujesz symbolu plusa, ale musisz dodać przestrzeń nazw pakietu Androida, tak jak poniżej:
android:id="@android:id/list"
Ale na poniższym obrazku Eclipse nie sugeruje żadnego @android:id/
.
Są
@id/
i@android:id/
takie same?
android
android-xml
Vikas Patidar
źródło
źródło
Odpowiedzi:
do którego odwołujesz się
Android resources
, które są już zdefiniowane w systemie Android,@android:id/..
a do uzyskiwania dostępu do zasobów, które zdefiniowałeś / utworzyłeś w swoim projekcie, używasz@id/..
Więcej informacji
Zgodnie z wyjaśnieniami na czacie powiedziałeś, że masz taki problem:
Cóż, to zależy od kontekstu, kiedy używasz atrybutu XML
android:id
, wtedy określasz nowy identyfikator i instruujesz parser (lub nazwij go konstruktorem), aby utworzył nowy wpisR.java
, więc musisz zawierać+
znak.Podczas gdy w innym przypadku, na przykład
android:layout_below="@id/myTextView"
, masz na myśli identyfikator, który już został utworzony, więc parser łączy to z już utworzonym identyfikatorem wR.java
.Więcej informacji Znowu
Jak powiedziałeś na czacie, pamiętaj, że
android:layout_below="@id/myTextView"
nie rozpozna elementu z identyfikatorem,myTextView
jeśli jest zapisany po elemencie, w którym go używasz.źródło
android:layout_below="@+id/myTextView"
a następnie zdefiniować sam element za pomocąandroid:id="@id/myTextView"
.+
w to,layout_below
coandroid:id
jest, jest naprawdę w porządku, ponieważThe '+' means to create the symbol if it doesn't already exist
jak wspomniał Tanmay Mandal w swojej miłej (ale niedocenionej) odpowiedzi. Z tego powodu nie ma również negatywnego wpływu na środowisko uruchomieniowe (możliwe, że jest to niezmiernie mały wzrost czasu kompilacji ^^).znak + to skrót do dodania identyfikatora do listy identyfikatorów zasobów. W przeciwnym razie musisz mieć je w pliku XML takim jak ten
źródło
<View android:id="@id/my_logo"/>
Jeśli nie masz pliku zasobów, który zdefiniowałem powyżej, musisz to zrobić jak<View android:id="@+id/my_logo"/>
uwaga: wystarczy tylko raz wykonać id więc jeśli w innym pliku układu zrobiłeś <Wyświetl android: id = "+ id / my_logo" />, nie będziesz musiał dołączać znaku „+” przy następnym użyciu tego samego identyfikatora w układzie.res/drawable/
lubres/layout/
lubres/values/
i jaka będzie nazwa tego pliku? Jeśli masz jakiś użyteczny link na ten temat, to opublikuj tutaj.Czasami w plikach układu znajdują się odniesienia:
<listview id="@+id/android:list">
i
<listview id="@android:id/list">
Co za różnica?
.. Cieszę się, że zapytałeś ☺
@+id/foo
oznacza, że tworzysz identyfikator o nazwie foo w przestrzeni nazw aplikacji. Możesz się do niego odwołać za pomocą@id/foo
.@android:id/foo
oznacza, że masz na myśli identyfikator zdefiniowany w przestrzeni nazw Androida.„+” Oznacza utworzenie symbolu, jeśli jeszcze nie istnieje. Nie potrzebujesz go (i nie powinieneś go używać) podczas odwoływania się do symboli android: ponieważ są one już zdefiniowane dla ciebie przez platformę i nie możesz tworzyć własnych w tej przestrzeni nazw.
Ta przestrzeń nazw jest przestrzenią nazw frameworka. na przykład musisz użyć,
@android:id/list
ponieważ jest to identyfikator, którego struktura spodziewa się znaleźć .. (struktura wie tylko o identyfikatorach w przestrzeni nazw Androida).Całkowicie skopiowane z tego źródła
źródło
W skrócie
podczas
źródło
Od: https://developer.android.com/training/basics/firstapp/building-ui.html
źródło
To jest bardzo proste:
„@ + ...” - utwórz nowy
„@ ...” - link do istniejącego
Źródło: https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue
źródło
Z Przewodnika programisty :
At-symbol (
@
) na początku łańcucha wskazuje, że analizator składni XML powinien przeanalizować i rozwinąć resztę łańcucha identyfikatora oraz zidentyfikować go jako zasób identyfikatora. Symbol plus (+
) oznacza, że jest to nowa nazwa zasobu, którą należy utworzyć i dodać do naszych zasobów (wR.java
pliku). Istnieje wiele innych zasobów identyfikatora oferowanych przez platformę Android. Odwołując się do identyfikatora zasobu Androida, nie potrzebujesz symbolu plusa, ale musisz dodaćandroid
przestrzeń nazw pakietu, tak jak poniżej:android:id="@android:id/empty"
źródło
W środowisku Eclipse występuje błąd, który czasami powoduje
@+id/..
, że jeśli właśnie utworzyłeś nowy , nie zostanie on natychmiast dodany do pliku R.java, nawet po czystym skompilowaniu projektu. Rozwiązaniem jest zrestartowanie Eclipse.Myślę, że powinno to zostać rozwiązane tak szybko, jak to możliwe, ponieważ może (i z doświadczenia) pomylić niektórych programistów z myślą, że coś jest nie tak z ich składnią, i spróbować debugować to, nawet jeśli naprawdę nie ma nic do debugowania.
źródło
Android używa niektórych plików zwanych zasobami, w których przechowywane są wartości plików XML.
Teraz, gdy używasz @ id / dla obiektu XML, próbuje odwoływać się do identyfikatora, który jest już zarejestrowany w plikach wartości. Z drugiej strony, gdy używasz @ + id /, rejestruje on nowy identyfikator w plikach wartości, co sugeruje symbol „+”.
Mam nadzieję że to pomoże :).
źródło
@id/
i@android:id/
to nie to samo.@id/
odniesienie do identyfikatora w aplikacji,@android:id/
odwołanie do elementu na platformie Android.Zaćmienie jest złe.
źródło
@id/ referencing ID in your application
Mówisz , że Ale eclise daje,Error: No resource found that matches the given name (at 'id' with value '@id/my_resource_id')
gdy używamy go do odsyłania do zasobu aplikacji. Jaka jest różnica między@id/
i@+id/
? Jak możesz powiedzieć, że zaćmienie jest złe?@id/
tylko w przypadkuRelativeLayout
Różnica między
@+id
i@id
to:@+id
służy do utworzenia identyfikatora widoku wR.java
pliku.@id
służy do odsyłania identyfikatora utworzonego dla widoku w pliku R.java.Używamy
@+id
zandroid:id=""
, ale co jeśli identyfikator nie jest tworzony i odsyłamy go przed utworzeniem (Forward Referencing).W takim przypadku musimy użyć
@+id
identyfikatora i podczas definiowania widoku musimy go odesłać.Proszę odnieść się do poniższego kodu:
W powyższym kodzie id dla Spinnera
@+id/spinner
jest tworzony w innym widoku i podczas definiowania spinnera odsyłamy do id utworzonego powyżej.Musimy więc utworzyć identyfikator, jeśli korzystamy z widoku przed jego utworzeniem.
źródło
Różnica pomiędzy
“@+id/”
i“@id/”
w AndroidziePierwszy służy do tworzenia
ID
określonego komponentu interfejsu użytkownika, a drugi do odniesienia do konkretnego komponentuźródło
Jeśli pozycja widok wykonuje tę samą operację można użyć
@+id
dla każdego wpisu w dowolnym układzie, ponieważ podczas kompilacji wielokrotności plik tworzy tylko jedno wyliczenie. Na przykład, jeśli mam przycisk Zapisz na każdej stronie, która wykonuje tę samą operację, używam w każdym układzie. Plik R.java ma tylko jeden wpis dla button_save.@+id/foo
R.java
android:id="@+id/button_save"
źródło