Подтвердить что ты не робот

Какова роль "isViewFromObject (View view, Object object)" в FragmentStatePagerAdapter?

Я использую FragmentStatePagerAdapter с моим плеером View. Возвращенный фрагмент не отображается на экране, если isViewFromObject (View view, Object object) возвращает false. Почему это?
Разработчик doc говорит 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. Но я не понимаю этого определения.

4b9b3361

Ответ 1

Метод instantiateItem(ViewGroup, int) возвращает Object для определенного вида. PagerAdapter реализация рассматривает этот Object как значение key, когда viewpager изменяет страницу.

Итак, если мы вернем представление из instantiateItem(ViewGroup, int), то наш key для этой страницы станет самим представлением. Мы можем проверить return view == object; от isViewFromObject (View view, Object object), который всегда будет возвращать true, и наши страницы будут отображаться:

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

Несколько дополнительных сведений из сообщения fooobar.com/info/257691/...:

При слайде ViewPager получает позицию представления из массива или создает его и сравнивает это представление с дочерними элементами ViewPager с методом адаптеров public boolean isViewFromObject(View view, Object object). Вид, равный объекту, отображается пользователю ViewPager. Если вид отсутствует, отображается пустой экран.

Вот метод ViewPager, где представление сравнивается с объектом:

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;
}