Подтвердить что ты не робот

Android: Как получить идентификатор родительского представления?

View.getRoot() возвращает View, поэтому мы можем легко определить, какой корневой вид можно использовать с помощью getResourceName(View.getId()).

View.getParent()..., в то время как я ожидаю, что он также вернет View, который является родительским, на самом деле возвращает экземпляр ViewParent, который, кажется, имеет очень мало полезных методов/полей. Это отстой.

Итак, есть ли способ узнать идентификатор родителя? Я считаю, что родитель View тоже View, поэтому он должен иметь поле mID.

Мне действительно интересно, почему Google не позволил View.getParent() просто вернуть View. Это имеет смысл только тогда, когда родительский элемент может быть чем-то другим, кроме View, и, насколько я знаю, он ограничивается View и его подклассами.

4b9b3361

Ответ 1

ViewParent - это просто интерфейс, который реализует любой вид, который может иметь дочерние элементы. В большинстве случаев класс, который вы получите, будет экземпляром ViewGroup, например LinearLayout или RelativeLayout. Я не совсем уверен, что вы подразумеваете под "именем", но если вы хотите получить имя класса, вы можете сделать это так: view.getParent().getClass().getName().

Ответ 2

docs утверждают, что родительский элемент не обязательно является View:

public final ViewParent getParent()

Добавлен в уровень API 1 Получает родителя этого представления. Обратите внимание, что parent является ViewParent и не обязательно View.

Возвращает родительский элемент этого представления.

Однако все реализации ViewParent наследуются от View. Это должно быть дизайнерское решение отделить родителя от View с помощью интерфейса ViewParent, хотя все реализации в SDK являются представлениями.

Ответ 3

Попробуйте выполнить его сначала. Например, если родительский элемент представления, который вы пытаетесь получить id, является TableRow, тогда выполните

((TableRow)View.getParent()).getID()