Мой коллега Джо, и я считаю, что мы нашли более простой способ решить ту же проблему. В нашем решении вместо расширения BaseAdapter мы расширяем ArrayAdapter.
Код следующий:
public class CircularArrayAdapter extends ArrayAdapter
{
public static final int HALF_MAX_VALUE = Integer.MAX_VALUE/2;
public final int MIDDLE;
private T[] objects;
public CircularArrayAdapter(Context context, int textViewResourceId, T[] objects)
{
super(context, textViewResourceId, objects);
this.objects = objects;
MIDDLE = HALF_MAX_VALUE - HALF_MAX_VALUE % objects.length;
}
@Override
public int getCount()
{
return Integer.MAX_VALUE;
}
@Override
public T getItem(int position)
{
return objects[position % objects.length];
}
}
Таким образом, создается класс с именем CircularArrayAdapter, который принимает тип объекта T (который может быть любым) и использует его для создания списка массивов. T обычно является строкой, хотя может быть чем угодно.
Конструктор такой же, как и для ArrayAdapter, но инициализирует константу с именем middle. Это середина списка. Независимо от того, какую длину массива MIDDLE можно использовать для центрирования ListView в середине списка.
getCount переопределяется для возврата огромного значения, как это было сделано выше при создании огромного списка.
getItem переопределяется, чтобы вернуть поддельную позицию в массиве. Таким образом, при заполнении списка список заполняется объектами циклично.
На этом этапе CircularArrayAdapter просто заменяет ArrayAdapter в файле, создающем ListView.
Для центрирования ListView в ваш файл должна быть вставлена следующая строка, создающая ListView после инициализации объекта ListView:
listViewObject.setSelectionFromTop(nameOfAdapterObject.MIDDLE, 0);
и с использованием константы MIDDLE, предварительно инициализированной для списка, представление центрируется по верхнему элементу списка в верхней части экрана.
:) ~ Ура, надеюсь, это решение будет полезным.