2014-05-21 22 views
8

Tôi không tìm thấy bất kỳ phương thức boolean nào thực hiện tác vụ này. Tôi có thể làm điều này bằng cách kiểm tra xem số id của số viewStub có thay đổi thành số được chỉ định là inflatedid không?Cách kiểm tra xem một viewStub đã tăng cao chưa?

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

} 

Cập nhật Bình luận về eOutput thứ

Theo mã này, toast luôn hiển thị thông điệp của mình, có nghĩa là kể từ mViewStub được gán cho findViewById nó không bao giờ rỗng ngoại trừ chế độ xem viewstub trong alyout lớp phủ không có sẵn. Bất kỳ đề xuất.?

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

Nếu nó không bị thổi phồng, nó sẽ không có giá trị. Bạn có thể kiểm tra xem nó là null hay không. –

+0

@ Eu.Dr. xin vui lòng xem các cập nhật – LetsamrIt

Trả lời

2

lưu ý từ google:

Khi một ViewStub được thực hiện rõ ràng, hoặc khi thổi phồng() được gọi, tài nguyên bố trí được bơm căng.

để bạn có thể kiểm tra mức hiển thị (hoặc thậm chí kiểm tra xem đó có phải là "null") không.

+0

xin vui lòng xem các cập nhật – LetsamrIt

+0

đó là không đúng, viewstub không phải là null khi nó được thổi phồng – Sniper

-5

Tôi đã giải quyết nó bằng cách sử dụng flags. Tôi tuyên bố một boolean biến toàn cầu isInflatedBefore thiết ban đầu để 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

Chúng ta có thể xem mã ViewStub nguồn, phương pháp quan trọng nhất là 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"); 
    } 
} 

Thông báo dòng này parent.removeViewInLayout(this), nó đã bị loại bỏ trong bố cục sau khi thổi phồng. Vì vậy, chúng tôi có thể kiểm tra xem một viewStub có bị thổi phồng theo cách này hay không.

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

để xem kết thúc viewstub nó làm việc chỉ cần kiểm tra, mViewStub.getParent()! = null, nếu nó không phải là kết thúc nó làm việc cha mẹ sẽ được! = null nếu không, cha mẹ sẽ bị rỗng – Sniper

+0

Hoạt động như một sự quyến rũ. –

1

Gọi bạn yourViewStub.visibility(View.VISIBLE) bạn không cần kiểm tra xem nó có bị thổi phồng hay không.

+0

Có cùng một lòng. –

0
if (mViewStub.getParent() != null) { 
    //have not been inflated 
    mViewStub.inflate(); 
} else { 
    //already inflated 
} 
Các vấn đề liên quan