Вопрос по scrollbar, dynamic-loading, android, listview – Динамическое представление списка загрузки Android при проблемах ScrollListener

4

Я реализовал представление списка, каждый пользователь прокручивает до нижнего экрана, он автоматически добавляет новые данные в представление списка. После завершения прокрутки onScroll () вызывает каждый новый элемент, который входит в отображаемое представление, от начала до конца прокрутки.

lv_best = (ListView) findViewById(R.id.lv_best);
bestadapter = new LazyAdapter(this, lst_tab_best);
lv_best.setAdapter(bestadapter);
lv_best.setOnScrollListener(new AbsListView.OnScrollListener() {

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) { }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
                        int visibleItemCount, int totalItemCount) {

    Log.d("onScroll ", firstVisibleItem+"-"+visibleItemCount+"-"+totalItemCount);
    boolean loadMore = firstVisibleItem + visibleItemCount >= totalItemCount;
    if(loadMore){
            new ChangeTab_best().execute();
     }
     }
    });

Я запускаю в эмуляторе, список выше отображает с 5 элементами, но я не могу определить конец прокрутки в ListView, ChangeTab_best () вызывается много раз. Когда я вижу Logcat android, все переменные firstVisibleItem, visibleItemCount, totalItemCount всегда равны 0

Так что здесь происходит?

Ваш Ответ

3   ответа
0
    lv_best.setOnScrollListener(new OnScrollListener() {
                @Override
                public void onScrollStateChanged(AbsListView view, int scrollState) {
                    switch (scrollState) {
                    case OnScrollListener.SCROLL_STATE_IDLE:
                                         // when list scrolling stops

                                        manipulateWithVisibleViews(view);

                        break;
                    case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                        break;
                    case OnScrollListener.SCROLL_STATE_FLING:
                        break;
                    }
                }

                @Override
                public void onScroll(AbsListView view, int firstVisibleItem,
                        int visibleItemCount, int totalItemCount) { 
                }
            });

private void manipulateWithVisibleViews(AbsListView view){
        int count = view.getChildCount(); // visible views count
        int lastVisibleItemPosition = view.getLastVisiblePosition();

        for (int i = 0; i < count; i++) {
            View convertView = view.getChildAt(i);
            // update views
            }
        }

}
Как загрузить данные сервера, используя разбиение на страницы для просмотра списка Android с существующими данными Harsha
отредактировал мой пост. попробуй Veaceslav Gaidarji
firstVisibleItem, visibleItemCount, totalItemCount по-прежнему равен 0, а представление списка загружено 5 элементов. Я не могу обнаружить последний видимый элемент chinh
1

мма первого видимого элемента и элементов на странице может быть на 1 счет больше или меньше ожидаемой. Я использовал то же самое, пока не переключился на новый метод. Что я сделал, так это реализовал слушатель к адаптеру listview и в проверке getview, если (position == totalItemCount элементов в массиве, которые будут отображаться), если да, я вызываю моего слушателя из адаптера. Достаточно просто

15

firstVisibleItem а такжеvisibleItemCount, Я создалdemo example для того же, используя AsyncTask, который будет загружать элементы в фоновом режиме и обновлять пользовательский интерфейс.

ВсегоfirstVisibleItem а такжеvisibleItemCount даст вам количество загруженных элементов, а затем вы сможете реализовать логику загрузки большего количества элементов.

int loadedItems = firstVisibleItem + visibleItemCount;
Как насчет обратной прокрутки? Pratik Butani

Похожие вопросы