2013-01-01 76 views
11

View.getRoot()返回View,所以我們可以通過使用getResourceName(View.getId())很容易找出哪個是根視圖。Android:如何獲得父視圖的ID?

View.getParent() ...,雖然我預計它也會返回View這是父級,實際上只返回一個實例ViewParent,似乎有很少有用的方法/字段。它很爛。

那麼,有什麼辦法可以知道父母的ID嗎?我相信View的父母也是View,因此它應該有mID字段。

我真的很想知道爲什麼Google不讓View.getParent()只是返回View。這是有道理的,只有當View以外的其他東西可以作爲父母時,並且據我所知,它僅限於View及其子類。

+0

View.getId()返回查看和View.getClass()的名稱。的getName()retun查看類型的名稱 –

回答

18

ViewParent只是一個接口,任何可以有孩子的View實現。大多數情況下,您返回的課程將是ViewGroup的實例,如LinearLayoutRelativeLayout。我不完全確定你的名字是什麼意思,但如果你想獲得類名,你可以像這樣做:view.getParent().getClass().getName()

+0

謝謝,我會更新我的帖子以獲得更多清晰度。 – Quv

+7

如果你想獲得ID,你需要先將它轉換爲一個'ViewGroup'。請注意,它不是100%安全的,因爲它也可以是'ViewRootImpl',儘管我懷疑你會在實踐中得到這些。所以'((ViewGroup)view.getParent())。getId()' – dmon

5

docs狀態父不一定是View

公共最終ViewParent的getParent()

在API級別1獲取該視圖的父。請注意, 父級是ViewParent,不一定是View。

返回此視圖的父級。

然而,ViewParent的所有實現繼承自View。這應該是一個設計決定,使用ViewParent接口將父節點與View分開,儘管SDK中的所有實現都是視圖。

3

試着先鑄造它。例如,如果認爲你正在試圖獲得的ID父是的TableRow,然後做

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