2012-07-25 30 views
5

Điều gì đang xảy ra: Hai trang ViewPager đầu tiên được tải độc đáo (ViewPager tự động tải + -1 từ trang hiện tại). Khi bạn cuộn qua, các trang tiếp theo sẽ không hiển thị. Bản trình diễn GIF của sự cố bên dưới.ViewPager + PagerAdapter hiển thị các trang trống sau hai mục đầu tiên

thông tin gỡ lỗi: Các trang được khởi tạo (xem mã dưới đây) và được thêm thành công vào ViewPager ArrayList<ItemInfo>mItems (xác nhận qua tin nhắn Log). Tôi biên dịch lại thư viện android.support.v4 với debug = true set (mmm frameworks/support/v4/ in aosp) và nó cho thấy mọi thứ hoạt động hoàn hảo EXCEPT:

Các phương thức onLayout và onMeasure trong ViewPager ngừng được gọi sau khi hai khung nhìn đầu tiên được nạp. Điều này có nghĩa là các trang khác có màu đen vì chúng không bao giờ được đo & được sắp xếp như chúng đáng lẽ phải có. Tôi đã thử thêm các lời gọi requestLayout() khác nhau tại các điểm khác nhau để buộc làm mới cây bố cục không có kết quả.

Bối cảnh: Tôi có một ViewPager được khởi tạo qua inflater.inflate và được tìm thấy qua view.findViewById (R.layouy.myid). Nó trực tiếp thay thế một cái nhìn Gallery cũ, và cho các mục đích thử nghiệm PagerAdapter instantiateItem (bộ sưu tập, chức vụ) chỉ đơn giản là thực hiện điều này:

@Override 
public Object instantiateItem(View collection, final int position) { 
    final TextView tv = new TextView(collection.getContext()); 
    tv.setText("Looking at page " + position); 
    tv.setTextColor(Color.WHITE); 
    tv.setBackgroundColor(Color.rgb((int)(Math.random()*100), (int)(Math.random()*100), (int)(Math.random()*100))); 
    tv.setTextSize(22); 
    ((ViewPager) collection).addView(tv); 
    return tv; 
} 

Bất kỳ ý tưởng? Dường như với tôi giống như một số cài đặt bí ẩn trong bố mẹ của PageView bằng cách nào đó, hãy tắt một số cách nào đó trên Trang chủ

+1

[Bản trình diễn GIF của sự cố (imgur)] (http://i.stack.imgur.com/YPsJr.gif) –

+0

bạn có triển khai 'destroyItem' trong bộ điều hợp của mình không? http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#destroyItem(android.view.ViewGroup, int, java.lang.Object) –

+0

Có, chính xác như được đề xuất: 'destroyItem (Xem c, int p, Object v) {((ViewPager) c) .removeView ((Xem) v); } 'và nó hoạt động hoàn hảo trong ứng dụng thử nghiệm của tôi. –

Trả lời

9

Tìm thấy sự cố của tôi. Trong bố mẹ của chế độ xem của tôi, một người nào đó đã được phân loại là LinearLayout và bỏ qua requestLayout() mà không cần gọi số super.requestLayout().

Điều này đã phá vỡ cấu trúc phân cấp chế độ xem của tôi và ngăn onMeasure và onLayout khỏi bị gọi trên ViewPager của tôi. Không đo lường và đặt ra các trang chúng hiển thị dưới dạng trống trong ViewPager.

Hy vọng điều này sẽ giúp người khác ra ngoài vào một ngày nào đó. Nó chắc chắn đã cho tôi mãi mãi để tìm ra.

PRO TIP: android-sdk/tools/hierarchyviewerđáng kinh ngạc. Cảm ơn nhóm Android. Mọi người nên chạy nó ít nhất một lần, nó có thể vô giá trong việc gỡ lỗi và thiết kế giao diện người dùng bất kỳ.

+0

hiện không được giám sát? –

+0

Phiên bản dòng lệnh là, nhưng phiên bản từ Màn hình thiết bị Android thì không. – Neeeko

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