2013-11-19 2 views
1

Я использую listview для отображения комментариев. Для этого я выполняю ленивую загрузку списка, так как возможно, что в базе данных есть 50 комментариев. поэтому я частично обрабатываю комментарии.Событие ListView OnScroll, выполняющееся несколько раз для той же позиции

Для тестирования Я прямо сейчас делаю запрос на 3 комментария. Когда я добрался до 3-го ряда, я снова запрашиваю следующие 3 комментария. Теперь проблема в том, что я прокручивал до 3-й строки, Onscroll выполнял несколько раз для третьей строки, получившей множественный запрос на сервер, а не один раз следующий 3 комментария.

Ниже приведен код:

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

     Log("isFirtTime - "+firstTimeLoaded+" ** noMore -"+ noMoreCommentsFound); 
     if(firstTimeLoaded==false && noMoreCommentsFound==false) { 
      Log("firstVisibleItem - "+firstVisibleItem+" ** visibleItemCount -"+ visibleItemCount+" ** totalItemCount"+totalItemCount); 
      if(firstVisibleItem+visibleItemCount==totalItemCount) { 
       if(FviewsAPI.isNetworkAvailable(getApplicationContext())) { 
        commentStartIndex+=3;     
        FviewsAPI.getMovieComments(movieId, commentStartIndex, commentEndIndex, MovieDetails.this); 
       } 
      } 
     } 
    } 

Ниже LogCat деталь отслеживать событие прокрутки:

11-19 12:21:21.842: V/FVIEWS(10358): isFirtTime - false ** noMore -false 
11-19 12:21:21.842: V/FVIEWS(10358): firstVisibleItem - 0 ** visibleItemCount - 2 ** totalItemCount - 3 
11-19 12:21:21.862: V/FVIEWS(10358): pos : 2 

11-19 12:21:21.872: V/FVIEWS(10358): isFirtTime - false ** noMore -false 
11-19 12:21:21.872: V/FVIEWS(10358): firstVisibleItem - 0 ** visibleItemCount - 3 ** totalItemCount - 3 
11-19 12:21:21.872: V/URL(10358): ~~URL - http://***.***.*.100/dipen/****_new/web/viewAllComments/14/3/3 

11-19 12:21:21.882: V/FVIEWS(10358): isFirtTime - false ** noMore -false 
11-19 12:21:21.882: V/FVIEWS(10358): firstVisibleItem - 0 ** visibleItemCount - 3 ** totalItemCount - 3 
11-19 12:21:21.882: V/URL(10358): ~~URL - http://***.***.*.100/dipen/****_new/web/viewAllComments/14/6/3 

11-19 12:21:21.892: V/FVIEWS(10358): isFirtTime - false ** noMore -false 
11-19 12:21:21.892: V/FVIEWS(10358): firstVisibleItem - 0 ** visibleItemCount - 3 ** totalItemCount - 3 
11-19 12:21:21.892: V/URL(10358): ~~URL - http://***.***.*.100/dipen/****_new/web/viewAllComments/14/9/3 

Если вы видите детали LogCat, когда третья строка появляется на экране, OnScroll события регистрируя «visibleItemCount - 3» несколько раз (ШИРИНА ЛИСТИВИНА УСТАНАВЛИВАЕТСЯ ТОЛЬКО ОТОБРАЖЕНИЕ ДВУХ РУКОВОДИТЕЛЕЙ НА ЭКРАНЕ), следовательно, он вызывает несколько раз комментарий api intsead только один раз следующие 3 комментария api.

ЧТО ANDROID DOC говорит, «OnScroll событие будет называться после того, как свиток завершил» здесь ссылка на документ: http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html#onScroll(android.widget.AbsListView, int, int, int)

Тогда почему несколько раз он звонит на 3-й строке ?? Есть идеи??

ответ

1
onscroll event will be called after the scroll has completed 

Это значит onscroll event will be called after the last item of listview comes to visible. Надеюсь, это поможет вам.

+0

благодарит за комментарий. Я понял, что говорит док. Но мой вопрос заключается в том, когда я прокручиваю вниз до третьей строки, что означает, что на экране появится 3-я строка. Во время этого процесса для 3-й строки он вызывает многократное событие onScroll. вы можете увидеть мой logcat также для 3-й строки. предположим, что он должен называться только один раз после завершения прокрутки. почему это не происходит? надеюсь, вы получите то, что я пытаюсь сказать. –

+0

У вас есть четвертый ряд? Если это не происходит, это происходит. Почему, поскольку событие 'onscroll будет вызвано после завершения прокрутки', объяснение: Listroll listener будет проверять список в течение нескольких раз, будет ли последний элемент отображаться, и обнаруживать, что' yes' проверяется каждый, поэтому 'onscroll' вызывается для каждой проверки , – Gunaseelan

+0

Gunaseelan: спасибо за ваш комментарий к этому. четвертая строка появится после вызова api для следующих 3 записей. поэтому, как только я на третьей строке, он вызовет api и после получения данных с сервера, я вызываю notifyDatasetchange на адаптере. Таким образом, следуя этому подходу, он должен быть вызван api только один раз для третьей строки, появляющейся на экране, в то время как здесь моя программа, она вызывает несколько раз, как только я впервые прокручиваю ее до третьей строки. –

Смежные вопросы