ViewPager + PagerAdapter показывает пустые страницы после первых двух элементов

Что происходит: первые две страницы ViewPager загружены красиво (ViewPager автоматически загружает +-1 с текущей страницы). Когда вы прокручиваете эти страницы, следующие страницы не отображаются. GIF демо проблемы ниже.

Отладочная информация: страницы создаются (см. Код ниже) и успешно добавляются в ViewPager ArrayList<ItemInfo>mItems (подтверждено с помощью журнала сообщений). Я перекомпилировал android.support.v4 библиотека с установленным значением debug=true (mmm frameworks/support/v4/ в aosp), и это показывает, что все работает отлично, за исключением:

Методы onLayout и onMeasure в ViewPager перестают вызываться после загрузки первых двух представлений. Это означает, что другие страницы являются черными, потому что они никогда не были измерены и расположены так, как следовало бы. Я пытался добавить разные запросы requestLayout() в разных точках, чтобы принудительно обновить дерево макета, но безрезультатно.

Фон: у меня ViewPager, созданный с помощью inflater.inflate и найденный с помощью view.findViewById(R.layouy.myid). Он напрямую заменяет старый вид галереи, и для целей тестирования PagerAdapter instantiateItem(collection, position) просто делает это:

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

Есть идеи? Мне кажется, что некоторые загадочные настройки в родителях PageView как-то отключают onLayout PageView

1 ответ

Решение

Нашел мою проблему. В родительском родителя моего взгляда кто-то подкласс LinearLayout и перебор requestLayout() без звонка super.requestLayout(),

Это нарушило обновление моей иерархии представлений и предотвратило вызов onMeasure и onLayout на моем ViewPager. Не измеряя и не выкладывая страницы, они отображались пустыми во ViewPager.

Надеюсь, это когда-нибудь поможет кому-то еще. Это наверняка заняло у меня целую вечность, чтобы понять.

СОВЕТ ПРОФИЛАКТИКИ: android-sdk / tools /ierarchyviewer невероятен. Спасибо команде Android. Каждый должен запустить его хотя бы один раз, это может иметь неоценимое значение при отладке и разработке любого пользовательского интерфейса.

Другие вопросы по тегам