2014-05-21 17 views
8

Non ho trovato alcun metodo booleano per eseguire questa operazione. Posso farlo controllando se lo id di viewStub è cambiato in quello specificato come inflatedid?Come verificare se un viewStub è già gonfiato?

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(); 

} 

Aggiornamento Commenti esimo eOutput

Secondo questo codice, il toast mostra sempre il suo messaggio, che vuol dire in quanto mViewStub viene assegnato findViewById esso non è mai nullo, ad eccezione della vista viewstub nel sottostrato che alyout non è disponibile. Eventuali suggerimenti.?

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

Se non gonfiato, sarà nullo. Puoi verificare se è nullo o no. –

+0

@ Eu.Dr. vedere l'aggiornamento – LetsamrIt

risposta

2

nota google:

Quando un ViewStub viene resa visibile, o quando gonfiare() viene richiamato, la risorsa layout viene gonfiato.

in modo da poter controllare la visibilità (o anche controllare se è "null").

+0

per favore vedere l'aggiornamento – LetsamrIt

+0

che non è vero, viewstub non è nullo quando è gonfiato – Sniper

-5

Ho risolto utilizzando flags. Ho dichiarato una variabile booleana globale isInflatedBefore impostato inizialmente false

Codice:

//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

Siamo in grado di visualizzare il codice ViewStub di origine, il metodo più importante è 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"); 
    } 
} 

Avviso questa linea parent.removeViewInLayout(this), è stato rimosso nel layout dopo inflate.so possiamo controllare se un viewStub è già gonfiato in questo modo.

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

per vedere il viewstub termina il suo lavoro basta controllare, mViewStub.getParent()! = null, se non è finito è lavoro genitore sarà! = null altrimenti il ​​genitore sarà nullo – Sniper

+0

Funziona come un incantesimo. –

1

Calling yourViewStub.visibility(View.VISIBLE) Non è necessaria per verificare se E'gonfiato o meno.

+0

Ho la stessa cotta. –

0
if (mViewStub.getParent() != null) { 
    //have not been inflated 
    mViewStub.inflate(); 
} else { 
    //already inflated 
} 
Problemi correlati