2014-05-21 4 views
8

मुझे यह कार्य नहीं मिला कोई भी बूलियन विधि नहीं मिला। क्या मैं यह जांच कर ऐसा कर सकता हूं कि viewStub के idinflatedid के रूप में निर्दिष्ट एक में बदल गया है या नहीं?कैसे जांचें कि कोई दृश्यस्ट्यूब पहले से ही फुलाया गया है या नहीं?

Javacode:

protected void plantViewTree() { 
    // TODO Auto-generated method stub 

     ViewStub mViewstub = (ViewStub) findViewById(R.id.viewStub00); 

      if (mViewStub is inflated) { 
       //do somthing 
       }else 
       mViewstub.inflate(); 

} 

अद्यतन वें eOutput

इस कोड के अनुसार पर टिप्पणियाँ, toast हमेशा प्रदर्शित करता है अपने संदेश है, जो mViewStub के बाद से मतलब findViewById को सौंपा गया है यह अंडरलेइंग एलीआउट में viewstub दृश्य को छोड़कर कभी भी शून्य नहीं है। कोई सुझाव।? गूगल से

protected void plantViewTree() { 
    // TODO Auto-generated method stub 
    ViewStub mViewstub = (ViewStub) findViewById(R.id.viewStub00); 
    if (mViewstub != null) 
     Toast.makeText(getApplicationContext(), "view is inflated", 
Toast.LENGTH_LONG).show(); 
    else 
     mViewstub.inflate(); 
} 
+0

यदि यह फुलाया नहीं गया है, तो यह शून्य होगा। आप जांच सकते हैं कि यह शून्य है या नहीं। –

+0

@ यू.यूआर। कृपया अद्यतन – LetsamrIt

उत्तर

2

ध्यान दें:

जब एक ViewStub दिखाई किया जाता है, या जब बढ़() उत्पन्न होता है, लेआउट संसाधन फुलाया जाता है।

ताकि आप दृश्यता की जांच कर सकें (या यह जांच भी कर सकते हैं कि यह "शून्य" है या नहीं)।

+0

देखें, अद्यतन – LetsamrIt

+0

अद्यतन करें जो सत्य नहीं है, दृश्यमान को – Sniper

-5

मैंने इसे flags का उपयोग करके हल किया।

//declaration of the variable 
private boolean isInflatedBefore = false 

... 
... 
... 

protected void plantViewTree() { 
    // TODO Auto-generated method stub 

    ViewStub mViewstub = (ViewStub) findViewById(R.id.viewStub00); 

    if (! isInflatedBefore) { 
     isInflatedBefore = true; 
     mViewstub.inflate(); 
       }else { 
       //some code 
       } 
14

हम ViewStub स्रोत कोड देख सकते हैं, सबसे महत्वपूर्ण विधि inflate() है,

public View inflate() { 
    final ViewParent viewParent = getParent(); 

    if (viewParent != null && viewParent instanceof ViewGroup) { 
     if (mLayoutResource != 0) { 
      final ViewGroup parent = (ViewGroup) viewParent; 
      final LayoutInflater factory; 
      if (mInflater != null) { 
       factory = mInflater; 
      } else { 
       factory = LayoutInflater.from(mContext); 
      } 
      final View view = factory.inflate(mLayoutResource, parent, 
        false); 

      if (mInflatedId != NO_ID) { 
       view.setId(mInflatedId); 
      } 

      final int index = parent.indexOfChild(this); 
      parent.removeViewInLayout(this); 

      final ViewGroup.LayoutParams layoutParams = getLayoutParams(); 
      if (layoutParams != null) { 
       parent.addView(view, index, layoutParams); 
      } else { 
       parent.addView(view, index); 
      } 

      mInflatedViewRef = new WeakReference<View>(view); 

      if (mInflateListener != null) { 
       mInflateListener.onInflate(this, view); 
      } 

      return view; 
     } else { 
      throw new IllegalArgumentException("ViewStub must have a valid layoutResource"); 
     } 
    } else { 
     throw new IllegalStateException("ViewStub must have a non-null ViewGroup viewParent"); 
    } 
} 

सूचना इस लाइन: मैं एक वैश्विक बूलियन चर isInflatedBefore

कोड false के शुरू में सेट घोषित parent.removeViewInLayout(this), इसे फुलाए जाने के बाद लेआउट में हटा दिया गया था। इसलिए हम जांच सकते हैं कि कोई दृश्यस्टूब पहले से इस तरह से फुलाया गया है या नहीं।

if (mViewStub.getParent() != null) { 
    mViewStub.inflate(); 
} else { 
    mViewStub.setVisibility(View.VISIBLE); 
} 
+1

फुलाया गया है, यह देखने के लिए कि व्यूस्ट्यूब इसे पूरा करने के लिए बस देखता है, mViewStub.getParent()! = null, अगर यह खत्म नहीं होता है तो यह काम है माता-पिता होंगे! = शून्य अन्यथा माता-पिता शून्य होंगे – Sniper

+0

एक आकर्षण की तरह काम करता है। –

1

कॉलिंग yourViewStub.visibility(View.VISIBLE) आप नहीं है अगर यह फुलाया या नहीं की जाँच करने की जरूरत है।

+0

एक ही क्रश मिला। –

0
if (mViewStub.getParent() != null) { 
    //have not been inflated 
    mViewStub.inflate(); 
} else { 
    //already inflated 
} 
संबंधित मुद्दे