2015-01-23 1 views
1

스크롤이 화면 하단에있을 때 ListView 업데이트를하려고 할 때 거의 작동했지만 약간의 문제가 남아 있습니다. 스크롤과 함께. 모두 여기의현재 위치가 listview의 lastitem 일 때 onScroll()이 실행되지 않습니다.

먼저 내가 응용 프로그램을 실행하면 if (currentFirstVisibleItem+currentVisibleItemCount == ttc) 조건이 참이 될 수 있도록

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
       currentFirstVisibleItem = firstVisibleItem; 
       currentVisibleItemCount = visibleItemCount; 
       ttc = totalItemCount; 
        // check if the current item is last, 
        if (currentFirstVisibleItem+currentVisibleItemCount == ttc){ 
         Log.e("ss","I am here"); 
         if (totalTime == timeConsumed){ 
          Log.e("Last","Last"); 
          // add data on listView 
          // update listView 
          notifyDataSetChanged(); 

         } 
        } 
       } 

, 나는 바닥에 모든 방법을 스크롤 ListView의 lastItem에 감지 내 코드이며,이 때문에 작업 Log.eI am here에 대한 메시지가 나타납니다.

이 시점에서 이미 화면 하단에있는 if (totalTime == timeConsumed) 블록이 5 초 후에 실행될 때까지 기다립니다. 최대한 빨리 블록이 실행되면 로그 메시지 Log.e("Last","Last");이 나옵니다. 이미 ListView의 맨 아래에 있기 때문에 문제가 있습니다. notifyDataSetChanged은 이미 ListView의 하단에 있으며 실행하기 위해 자동으로 실행되지 않습니다. notifyDataSetChanged() 화면을 터치해야만 실행됩니다.

Log.e("Last","Last");이 실행될 때 notifyDataSetChanged()이 실행되지 않는 이유는 무엇입니까? 이미 화면 맨 아래에 있더라도? notifyDataSetChanged()을 실행하기 위해 화면을 터치해야하는 이유는 무엇입니까?

+0

어디에서 기본 데이터를 변경하고 있습니까? – darnmason

+0

데이터가 동일한 'if'블록에서 변경되었습니다. 즉, 'if (totalTime == timeConsumed)' – bhuvesh

+0

데이터를 변경하고 변경 사항을 알리면 데이터를 변경하는 코드가 있어야합니다. .. – darnmason

답변

0

어댑터에서이 기능을 처리해보십시오. getView에서 위치가 마지막 데이터 항목인지 확인하고 비동기 호출을 시작하여 다른 데이터 페이지를로드 할 수 있습니다.

+0

실제로 나는 그것을 원하지 않습니다 .... 내 코드는 수동으로 스크롤 할 때 작동하지만 기본 위치가 바닥면 실행되지 않습니다. 그리고 당신이 게시 한 것은 내 질문에 대답하지 않습니다. – bhuvesh

+0

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. – simonzack

+0

입력 해 주셔서 감사합니다. @imonzack – darnmason