2015-06-23 30 views
12

Tôi đang sử dụng một FragmentStatePagerAdapter có tầm nhìn Pager tôi. Mảnh vỡ được trả về không được hiển thị trên màn hình nếu isViewFromObject (View view, Object object) trả lại false. Tại sao vậy?
Nhà phát triển doc nói Determines whether a page View is associated with a specific key object as returned by instantiateItem(ViewGroup, int). This method is required for a PagerAdapter to function properly. Nhưng tôi không rõ ràng với định nghĩa này.Vai trò của "isViewFromObject (Chế độ xem, đối tượng đối tượng)" trong FragmentStatePagerAdapter là gì?

Trả lời

13

Phương pháp instantiateItem(ViewGroup, int) trả Object cho một cái nhìn cụ thể. PagerAdapter thực hiện đang xem xét Object như một giá trị key này khi ViewPager thay đổi một trang.

Vì vậy, nếu chúng tôi trả lại chính chế độ xem từ instantiateItem(ViewGroup, int), thì key cho trang đó sẽ trở thành chính chế độ xem. Chúng tôi có thể kiểm tra return view == object; từ isViewFromObject (View view, Object object) mà sẽ luôn luôn trở true và các trang của chúng tôi sẽ hiển thị:

public boolean isViewFromObject(View view, Object object) { 
    return view == object; 
} 

Một số hiểu biết sâu sắc hơn từ bài https://stackoverflow.com/a/16772250/1994950:

Khi bạn trượt, các ViewPager được xem vị trí từ một mảng hoặc instantiates nó và so sánh chế độ xem này với con của ViewPager với phương pháp bộ điều hợp public boolean isViewFromObject(View view, Object object). Chế độ xem tương đương với đối tượng được hiển thị cho người dùng trên ViewPager. Nếu không có chế độ xem thì màn hình trống sẽ hiển thị.

Đây là phương pháp ViewPager nơi xem được so sánh với đối tượng:

ItemInfo infoForChild(View child) { 
    for (int i=0; i<mItems.size(); i++) { 
     ItemInfo ii = mItems.get(i); 
     if (mAdapter.isViewFromObject(child, ii.object)) { 
      return ii; 
     } 
    } 
    return null; 
} 
Các vấn đề liên quan