2013-01-01 11 views
11

View.getRoot()View देता है, इसलिए हम आसानी से पता लगा सकते हैं कि getResourceName(View.getId()) का उपयोग करके रूट व्यू कौन सा है।एंड्रॉइड: अभिभावक के आईडी को कैसे प्राप्त करें?

View.getParent() ..., जबकि मुझे उम्मीद है कि यह View भी माता-पिता है, वास्तव में केवल ViewParent का उदाहरण देता है जो बहुत कम उपयोगी विधि/फ़ील्ड लगता है। यह बेकार है।

तो, क्या माता-पिता की पहचान जानने का कोई तरीका है? मेरा मानना ​​है कि View के माता-पिता भी View हैं, इस प्रकार इसमें एमआईडी क्षेत्र होना चाहिए।

मुझे सच में आश्चर्य है कि Google ने View.getParent() को क्यों नहीं दिया View देता है। यह समझ में आता है, केवल तभी जब View के अलावा कुछ और माता-पिता हो सकता है, और जहां तक ​​मुझे पता है, यह View और उसके उप-वर्गों तक सीमित है।

+0

View.getId() देखें और View.getClass() की वापसी के नाम से करते हैं। getName() retun व्यू प्रकार का नाम –

उत्तर

18

ViewParent सिर्फ एक इंटरफेस है कि कोई भी दृश्य जो बच्चों को लागू कर सकता है। अधिकांश बार जिस कक्षा में आप वापस आते हैं, वह ViewGroup का उदाहरण होगा, जैसे LinearLayout या RelativeLayout। मुझे बिल्कुल यकीन नहीं है कि आपका नाम "नाम" से क्या है, लेकिन यदि आप कक्षा का नाम प्राप्त करना चाहते हैं तो आप हमेशा ऐसा कर सकते हैं: view.getParent().getClass().getName()

+0

धन्यवाद, मैं अधिक स्पष्टता के लिए अपनी पोस्ट अपडेट करूंगा। – Quv

+7

यदि आप आईडी प्राप्त करना चाहते हैं, तो आपको इसे पहले 'व्यू ग्रुप' में डालना होगा। ध्यान दें कि यह 100% सुरक्षित नहीं है क्योंकि यह 'ViewRootImpl' भी हो सकता है, हालांकि मुझे संदेह है कि आप इसे अभ्यास में प्राप्त करेंगे। तो '((व्यू ग्रुप) view.getParent())। GetId()' – dmon

5

docs राज्य है कि माता-पिता जरूरी View नहीं है:

सार्वजनिक अंतिम ViewParent getParent()

जोड़ा गया एपीआई स्तर 1 में इस दृश्य की मूल हो जाता है। ध्यान दें कि अभिभावक एक व्यूपेन्टेंट है और आवश्यक रूप से एक दृश्य नहीं है।

इस दृश्य के अभिभावक को लौटाता है।

हालांकि ViewParent के सभी कार्यान्वयन View से प्राप्त होते हैं। ViewParent इंटरफ़ेस का उपयोग करके माता-पिता को View से डीक्यूपल करने का एक डिज़ाइन निर्णय होना चाहिए, हालांकि एसडीके में सभी कार्यान्वयन विचार हैं।

3

इसे पहले कास्ट करने का प्रयास करें। उदाहरण के लिए, अगर देखें की मूल है कि आप की आईडी प्राप्त करने के लिए कोशिश कर रहे हैं एक TableRow है, तो

((TableRow)View.getParent()).getID() 
संबंधित मुद्दे