Я использую 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.
Но я не понимаю этого определения.
Какова роль "isViewFromObject (View view, Object object)" в FragmentStatePagerAdapter?
Ответ 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;
}