2012-12-28 11 views
13

मेरे पास एक ऐसा दृश्य है जिसे यह पता लगाने की आवश्यकता है कि यह उसके मूल दृश्य से जुड़ा हुआ है।एक दृश्य को कैसे पता लगाया जा सकता है जब यह अपने माता-पिता से जुड़ा हुआ हो?

ViewGroup में मेरे पास OnHierarchyChangeListener है जो मुझे यह जानने की अनुमति देता है कि जब कोई बच्चा दृश्य जोड़ा/हटाया जाता है, लेकिन मुझे विपरीत चीज़ की आवश्यकता होती है।

+0

मैंने सोचा कि यह था बस [onAttachedToWindow] (http://developer.android.com/reference/android/view/View.html#onAttachedToWindow()) – Blundell

+0

मैं के बारे में पढ़ा फ़ंक्शन, लेकिन यह बिल्कुल मेरी तरह की प्रतीत नहीं होता है। जो मैं समझता हूं, उससे केवल तभी बुलाया जाता है जब दृश्य खुद को आकर्षित करने वाला होता है, लेकिन मुझे यह जानना होगा कि यह माता-पिता में कब जोड़ा जाता है, जो ड्राइंग प्रक्रिया शुरू होने से पहले भी हो सकता है। साथ ही, यदि दृश्य हटा दिया गया है और किसी अन्य माता-पिता में जोड़ा गया है, तो मैं इस फ़ंक्शन के व्यवहार के बारे में निश्चित नहीं हूं। क्या इसे फिर से बुलाया जाता है? – user940016

+0

ऑनडेट को कॉल किया जाएगा, फिर एटैच, उन्हें ओवरराइड करने और – Blundell

उत्तर

15

आप कस्टम दृश्य बना सकते हैं और

public class CustomView extends View { 

    public CustomView(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onAttachedToWindow() { 
     super.onAttachedToWindow(); 
     Log.d("CustomView", "onAttachedToWindow called for " + getId()); 
     Toast.makeText(getContext(), "added", 1000).show(); 
    } 
} 

[संपादित करें 1]

अपने onAttachedToWindow में अपना सामान कर सकते हैं

आप सुनिश्चित कर सकते हैं कि आपके customview viewgroup सही करने के लिए जो आप चाहते हैं जोड़ा

@Override 
protected void onAttachedToWindow() { 
    // TODO Auto-generated method stub 
    super.onAttachedToWindow(); 

    if(((View)getParent()).getId()== R.id.relativelayout2) 
    {   
     Log.d("CustomView","onAttachedToWindow called for " + getId()); 
     Toast.makeText(context, "added", 1000).show();   
    } 

} 
+0

को खोजने के लिए स्वयं को लॉगिंग जोड़ने के बारे में, लेकिन जब इसे बनाया गया है तो एक दृश्य को देखने के लिए कोई दृश्य नहीं जोड़ा गया है! मैं जानना चाहता हूं कि कुछ दृश्य समूह में addView कहलाता है, इस दृश्य को तर्क के रूप में पारित किया जा रहा है। – user940016

+0

क्षमा करें आप सही हैं, कृपया संपादित उत्तर को देखें। – Talha

+0

कृपया ऊपर मेरी टिप्पणी देखें। मुझे यकीन नहीं है कि ATTatchToWindow मेरे मुद्दे के लिए सही समाधान है। – user940016

0

ठीक है, आपके पास OnHierarchyChangeListener में दृश्य है, इसलिए मुझे लगता है कि आप अपने विचारों में कॉलबैक जोड़ सकते हैं (उन्हें इंटरफेस के साथ उपclass करके) और इसे कॉल करें रोम OnHierarchyChangeListener। इस तरह, आपके विचारों को उसी समय बुलाया जाएगा जब OnHierarchyChangeListener को बुलाया जाता है।

हालांकि, मुझे आश्चर्य नहीं होगा कि जब ऐसा होता है, तो आपके विचारों की तरह आपके विचारों के कई गुण अभी तक परिभाषित नहीं किए जा सकते हैं।

+0

पर देख सकते हैं, लेकिन यह केवल उन माता-पिता को कार्यक्षमता को सीमित करता है जो इसका समर्थन करते हैं ... – user940016

+0

हां, ज़ाहिर है: यह माता-पिता के लिए स्वचालित प्रक्रिया नहीं है। – SylvainL

0

मुझे लगता है कि अगर आपको उस तरह के नियंत्रण की आवश्यकता है तो इसे एक टुकड़ा बनाना सर्वोत्तम हो सकता है। इस तरह आप एक और अधिक दानेदार जीवन चक्र तक पहुंच प्राप्त करते हैं।

0

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

उदाहरण:

public class LayoutInvokeChildAdded extends RelativeLayout { 

    private OnDoneListener onDoneListener; 

    public LayoutInvokeChildAdded(Context context) { 
     super(context); 
    } 

    public LayoutInvokeChildAdded(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public LayoutInvokeChildAdded(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    public void onViewAdded(View child) { 
     super.onViewAdded(child); 
     if (onDoneListener != null) 
      onDoneListener.onDone(childe); 
    } 

    public void setOnDoneListener(OnDoneListener onDoneListener) { 
     this.onDoneListener = onDoneListener; 
    } 
} 
संबंधित मुद्दे