2013-05-08 6 views
9

के लिए दृश्यता परिवर्तनों को कैसे प्रबंधित करें मैंने एंड्रॉइड में एक कस्टम दृश्य लिखा है। जब मुझे इस दृश्य की दृश्यता बदल जाती है तो मुझे कुछ प्रसंस्करण करने की आवश्यकता होती है। क्या कोई श्रोता है जिसे किसी दृश्य/विजेट की दृश्यता बदलने पर बुलाया जाता है?एक कस्टम एंड्रॉइड व्यू/विजेट

संपादित करें:

मैं जानता हूँ कि दृश्यता बदलने के लिए कैसे, अगर वहाँ एक श्रोता जो जब हम दृश्य पर setVisibility कहा जाता है जानना चाहते हैं!

+0

में और व्याख्या, कृपया – cgalvao1993

उत्तर

16

क्या आप अपनी कस्टम व्यू क्लास में उस प्रसंस्करण को करना चाहते हैं? यदि ऐसा है, तो क्यों न केवल सेट दृश्यता() विधि को ओवरराइड करें, सुपर() को कॉल करें, और फिर अपनी कस्टम प्रसंस्करण करें?

+0

इसे उत्तर के रूप में चिह्नित करने के बाद से इस समाधान को ब्लैकबेल्ट की विस्तृत व्याख्या – JeeZ

+2

से पहले प्रदान किया गया था, यह इस तरह से काम नहीं करता है। उदाहरण के लिए, यदि आप दृश्य के माता-पिता को अदृश्य होने के लिए सेट करते हैं, तो उस दृश्य की दृश्यता संपत्ति अभी भी दिखाई दे सकती है। बस इसका अभ्यास करें और आपको यह सच लगेगा। – Jacky

0

विजेट की दृश्यता बदलने के लिए, widget.setVisibility(View.Visible) या widget.setVisibility(View.Invisible) विधियों का उपयोग करें।

+0

मैं जानता हूँ कि दृश्यता बदलने के लिए कैसे, अगर वहाँ एक श्रोता जो जब हम दृश्य पर setVisibility कहा जाता है जानना चाहते हैं! – JeeZ

15

मुझे पता है कि दृश्यता को कैसे बदला जाए, यह जानना चाहेंगे कि श्रोता है जिसे हम दृश्य पर दृश्यता सेट करते समय बुलाते हैं!

आप अपने view/widget उपवर्ग और setVisibility ओवरराइड, और एक अंतरफलक है जिस पर आप अधिसूचना recive जाएगा पंजीकरण कराना होगा। उदाहरण के लिए:

public class MyView extends View { 

    public interface MyListener { 
    public void onSetVisibilityCalled(); 
    } 

    public void registerListener(MyListener myListener) { 
    this.mListener = myListener; 
    } 

public void setVisibility (int visibility) { 
    super.setVisibility(visibility); 
    if (mListener != null) 
    mListener.onSetVisibilityCalled(); 
} 

} 
8

आपको उस दृश्य को उपclass करना है जिसे आप श्रोता जोड़ना चाहते हैं। फिर आपको setVisibility के बजाय onVisibilityChanged ओवरराइड करना चाहिए। onVisibilityChanged तब ट्रिगर होता है जब दृश्य की दृश्यता किसी भी कारण से बदली जाती है, जिसमें पूर्वजों के विचार को बदल दिया गया था।

यदि आप View की दृश्यता में परिवर्तन करते समय एक अलग वर्ग को अधिसूचित करना चाहते हैं तो आपको एक इंटरफ़ेस की आवश्यकता होगी।

उदाहरण:

public class MyView extends View { 
    private OnVisibilityChangedListener mVisibilityListener; 

    public interface OnVisibilityChangedListener { 
    // Avoid "onVisibilityChanged" name because it's a View method 
    public void visibilityChanged(int visibility); 
    } 

    public void setVisibilityListener(OnVisibilityChangedListener listener) { 
    this.mVisibilityListener = listener; 
    } 

protected void onVisibilityChanged (View view, int visibility) { 
    super.onVisibilityChanged(view, visibility); 

    // if view == this then this view was directly changed. 
    // Otherwise, it was an ancestor that was changed. 

    // Notify external listener 
    if (mVisibilityListener != null) 
    mVisibilityListener.visibilityChanged(visibility); 

    // Now we can do some things of our own down here 
    // ... 
} 
} 
संबंधित मुद्दे