Ваш первый порт вызова должен быть документацией , который объясняет это разумно ясно:
Брошено, чтобы указать, что к массиву был обращен незаконный индекс. Индекс является либо отрицательным, либо большим или равным размеру массива.
Так, например:
int[] array = new int[5]; int boom = array[10]; // Throws the exception
Как избежать этого. ., не делайте этого. Будьте осторожны с вашими индексами массива.
Одной из проблем, с которыми иногда сталкиваются люди, является то, что массивы 1-индексируются, например
int[] array = new int[5]; // ... populate the array here ... for (int index = 1; index <= array.length; index++) { System.out.println(array[index]); }
Это пропустит первый элемент (индекс 0 ) и выдают исключение, когда индекс равен 5. Действующие индексы здесь 0-4 включительно. Правильный, идиоматический оператор
for
здесь будет:for (int index = 0; index < array.length; index++)
(Предполагается, что вы нуждаетесь в индексе, конечно. Если вы можете использовать расширенный для цикла, сделайте это.)
Моя идея состоит в том, что функция onCreate каждого фрагмента должна вызываться после пролистывания, так что перед созданием следующей страницы.
blockquote>Из "swipe" я предполагаю, что вы размещаете фрагменты в
ViewPager
. Он имеет ограничение экрана за пределами страницы , которое контролирует, сколько фрагментов предварительно создано на каждой стороне текущей страницы. По умолчанию это 1, поэтому на странице 0 также создается фрагмент страницы 1.
Если вы действительно хотите, чтобы фрагментonCreate()
запускался именно тогда, когда фрагмент становится видимым, установите для предела страницы за пределами экрана значение 0. Strike> Установка предела для страницы в 0 не работает, так как минимум по умолчанию 1.Если вам просто интересно определить, когда фрагмент становится видимым, вы можете подключиться к
setUserVisibleHint()
.
хорошо решено с этим
private boolean isViewShown = false;
private boolean isFragmentLoaded = false;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser && !isFragmentLoaded) {
isViewShown = true;
TableLayout table = (TableLayout)getActivity().findViewById(R.id.table);
display_album(table);
isFragmentLoaded = true;
} else {
isViewShown = false;
}
}