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. Каждый должен запустить его хотя бы один раз, это может иметь неоценимое значение при отладке и разработке любого пользовательского интерфейса.