Android: Как получить идентификатор родительского представления?
View.getRoot()
возвращает View
, поэтому мы можем легко определить, какой корневой вид можно использовать с помощью getResourceName(View.getId())
.
View.getParent()
..., в то время как я ожидаю, что он также вернет View
, который является родительским, на самом деле возвращает экземпляр ViewParent
, который, кажется, имеет очень мало полезных методов/полей. Это отстой.
Итак, есть ли способ узнать идентификатор родителя? Я считаю, что родитель View
тоже View
, поэтому он должен иметь поле mID.
Мне действительно интересно, почему Google не позволил View.getParent()
просто вернуть View
. Это имеет смысл только тогда, когда родительский элемент может быть чем-то другим, кроме View
, и, насколько я знаю, он ограничивается View
и его подклассами.
Ответы
Ответ 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()