Đ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 là đượ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ủ
[Bản trình diễn GIF của sự cố (imgur)] (http://i.stack.imgur.com/YPsJr.gif) –
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) –
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. –