2014-05-21 10 views
8

Ich fand keine boolesche Methode diese Aufgabe. Kann ich dies tun, indem ich überprüfe, ob die id der viewStub zu der als inflatedid angegebenen geändert?Wie überprüft man, ob ein viewStub bereits aufgeblasen ist?

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

} 

aktualisieren Kommentare zu th eOutput

diesem Code Nach der toast zeigt immer seine Botschaft, die seit mViewStub bedeuten zu findViewById zugewiesen wird ist nie null, außer dass die viewstub Ansicht im darunterliegenden Alyout nicht verfügbar ist. Irgendwelche Vorschläge.?

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

Wenn es nicht aufgeblasen ist, wird es null sein. Sie können überprüfen, ob es null ist oder nicht. –

+0

@ Eu.Dr. Bitte beachten Sie das Update – LetsamrIt

Antwort

2

note von Google:

Wenn ein ViewStub sichtbar gemacht wird, oder wenn aufblasen() aufgerufen wird, das Layout Ressource aufgeblasen wird.

so können Sie die Sichtbarkeit überprüfen (oder sogar überprüfen, ob es "null" ist).

+0

Bitte beachten Sie das Update – LetsamrIt

+0

das ist nicht wahr, Viewstub ist nicht null, wenn es aufgeblasen ist – Sniper

-5

Ich löste es mit flags. Ich erklärte eine globale boolean Variable isInflatedBefore anfänglich auf false

Code:

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

Wir können die ViewStub Quellcode sehen, die wichtigste Methode ist 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"); 
    } 
} 

Hinweis diese Linie parent.removeViewInLayout(this), es wurde im Layout nach dem inflate entfernt. So können wir überprüfen, ob ein viewStub bereits auf diese Weise aufgeblasen ist.

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

zu sehen ist Viewstub zu beenden, es ist Arbeit nur überprüfen, mViewStub.getParent()! = null, wenn es nicht fertig ist es Arbeit Eltern wird sein! = null sonst wird Eltern Null sein – Sniper

+0

Funktioniert wie ein Charme. –

1

yourViewStub.visibility(View.VISIBLE) Aufruf eröffnen Sie bitte benötigen, wenn Es ist aufgeblasen oder nicht zu überprüfen.

+0

Bekam den gleichen Schwarm. –

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