2012-07-20 20 views
7

Trong ứng dụng của tôi, tôi có một spinner và ViewStub, tùy thuộc vào lựa chọn mục của người dùng từ spinner, tôi phải tăng bố cục khác nhau và hiển thị bố cục tăng cao bên dưới spinner. Khi ứng dụng của tôi bắt đầu, ViewStub thổi phồng bố cục thành công vào lần chọn đầu tiên của bất kỳ mục nào từ spinner. Khi tôi cố gắng chọn một mục mới từ spinner, nó làm tăng ngoại lệ bên dướiViewStub tăng lỗi trong khi lạm dụng nhiều bố cục có điều kiện

java.lang.IllegalStateException: ViewStub must have a non-null ViewGroup viewParent 

Mã của tôi cho đến nay là

@Override 
public void onItemSelected(AdapterView<?> pParent, View pView, int pPosition, long pId) { 

if(pPosition == 1){ 
    m_cStub.setLayoutResource(R.layout.text_form); 
}else if(pPosition == 2){ 
    m_cStub.setLayoutResource(R.layout.integer_form); 
} 
View inflated = m_cStub.inflate(); 
} 

m_cStub là một ViewStub đối tượng được tạo bên trong onCreate() của Hoạt động.

Đây là chính mã bố trí xml tôi

<RelativeLayout..................> 
    <spinner......................./> 

    <ViewStub android:id="@+id/dynamic_form_layout" 
    android:inflatedId="@+id/dynamic_form_inflated_id" 
    android:layout_alignParentBottom="true" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 
</RelativeLayout> 

ai có thể vui lòng cho tôi biết nơi tôi sẽ sai. Nếu bạn có bất kỳ giải pháp nào khác để giải quyết vấn đề này, hãy chia sẻ.

Cảm ơn.

+0

Điều này chỉ là đoán thử này 'pView = m_cStub.inflate();' – MAC

+0

@ gtumca-MAC nó sẽ không hoạt động vì lỗi là với ViewStub không có dạng xem. –

Trả lời

22

ViewStub không được thiết kế để sử dụng trong các trường hợp như thế này. Sau khi cuống được thổi phồng, phần sơ khai là đã xóa khỏi cấu trúc phân cấp chế độ xem. Đó là lý do tại sao nó không có cha mẹ và đề cập đến IllegalStateException lớn lên. ViewStub không thể sử dụng nhiều lần. Ngoài ra, việc giữ tham chiếu lâu dài đến ViewStub là không cần thiết, nếu cần, thực hành tốt là null sau khi tăng, vì vậy GC có thể ăn nó.

Cân nhắc sử dụng addView()/removeView() để thay thế chế độ xem của bạn. Hoặc sử dụng tốt hơn ViewFlipper.

Các vấn đề liên quan