Бесконечная прокрутка в LinearLayout / ScrollView? - PullRequest
1 голос
/ 22 марта 2011

Я знаю, что каким-то образом можно создать ListView, который загружает больше данных, когда пользователь достигнет нижней части списка. Тем не менее, я работаю с ScrollView, в котором есть LinearLayout, и эти два компонента отлично работают с прокруткой и так далее. Но я не знаю, как я должен это сделать, чтобы получить бесконечный свиток.

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

РЕДАКТИРОВАТЬ: я нашел этот пост здесь в StackOverflow Как вызвать событие, когда scrollView достигнет дна с Android? , но я не знаю, что делать с ответом:

Учитывая требования, вы, вероятно, будете расширять BaseAdapter (в отличие от CursorAdapter, который использует другой механизм).

Вот фрагмент для этого:

public View getView(int position, View convertView, ViewGroup parent) {
    if (position == backingLinkedList.size()) {
        //get more items and add them to the backingLinkedList in a background thread
        notifyDataSetChanged();
    }
}

Ответы [ 2 ]

0 голосов
/ 09 августа 2014

Я знаю, что это было решено давно, но я хотел поделиться своим решением для будущих бесконечных скроллеров.

Я использовал метод onScroll в OnScrollListener, чтобы вызвать фоновый поток для получения дополнительных данных, и adapter.notifyDataSetChanged, чтобы уведомить ListView о дополнительных данных для загрузки и создания бесконечной прокрутки. По какой-то причине onScrollStateChanged не срабатывал, но onScroll делал то, что мне было нужно, поэтому мне не нужно было беспокоиться.

Долгое время я не понимал, как удержать ListView от перезагрузки и поместить меня обратно в начало списка, но потом понял, что мне нужно только инициализировать новый адаптер и один раз вызвать setListAdapter и каждый раз после этого звоните только notifyDataSetChanged. Раньше я также звонил setListAdapter, возвращая меня наверх.

0 голосов
/ 27 марта 2011

Если вы можете вызвать событие, когда достигнете нижней части прокрутки, вы можете попытаться создать свой собственный тип представления для хранения ваших данных. Когда вы дойдете до нижней части представления, загрузите следующие данные в класс представления и добавьте их в макет представления прокрутки.

Итак, в основном создайте класс, содержащий раздел того, что вы показываете. Добавьте первый в представление прокрутки. Когда вы дойдете до дна, создайте другой вид, содержащий ваши следующие данные, и используйте scrollviews_layout.addview(view_holding_the_new_data)

...