Охота понять что конкретно происходит в этих методах. Заходим в класс View и видим вот что:
@Nullable
public final <T extends View> T findViewById(@IdRes int id) {
if (id == NO_ID) {
return null;
}
return findViewTraversal(id);
}
/**
* @param id the id of the view to be found
* @return the view of the specified id, null if cannot be found
* @hide
*/
protected <T extends View> T findViewTraversal(@IdRes int id) {
if (id == mID) {
return (T) this;
}
return null;
}
По простому я знаю объяснение - findviewbyId ищет view по id, которое мы указали в xml разметке. Так что конкретно здесь происходит?
Это методы класс View. findViewById валидирует аргумент id, при успешной валидации вызывается метод findViewTraversal (он отвечает за поиск внутри View(себя)). Он проверяет принадлежит ли ему искомый id.
Чтоб понять зачем вообще так сделано нужно посмотреть еще класс ViewGroup extend View (он прямой потомок View). Это базовый класс для всех видов контейнеров: LinerLayout, RelativeLayout и тд. Он переопределяет findViewTraversal (он отвечает за поиск внутри ViewGroup (себя)). В методе findViewTraversal мы берем каждую View и спрашиваем ее, принадлежит ли ей искомый id через методы которые описаны в вашем вопросе.
/**
* {@hide}
*/
@Override
protected <T extends View> T findViewTraversal(@IdRes int id) {
if (id == mID) {
return (T) this;
}
final View[] where = mChildren;
final int len = mChildrenCount;
for (int i = 0; i < len; i++) {
View v = where[i];
if ((v.mPrivateFlags & PFLAG_IS_ROOT_NAMESPACE) == 0) {
v = v.findViewById(id);
if (v != null) {
return (T) v;
}
}
}
return null;
}
Таким образом мы можем искать элементы по айди в любых видах представления (View).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Как грамотно и удобно организовать аутентификацию в Spring REST Api через JWT? Сессию не хочу использовать, потому что это REST и JWTПроверка токена должна...
Я создаю приложение, которое распознает текст из фото, У меня почти всё готово, но приложение распознает весь участок изображения, Мне необходимо...
Строка лишь один раз возвращает отрицательное числоЧего не хватает чтобы возвращала при каждом вводе отрицательно числа в if (ln < 0 );