2010-01-25 2 views
26

나는 그것을 사용하고 있지만 목록의 끝까지 스크롤 했는데도 항상 0을 반환합니다.Android : ListView.getScrollY() - 작동합니까?

+1

사용자가 아래로 스크롤 할 때 목록 맨 위에 사라지는 픽셀 수는 [내 대답은 여기]입니다 (http://stackoverflow.com/questions/10808387/android- 점점 정확한 스크롤 위치에서 목록보기/13415273 # 13415273) – Maria

+0

올바른 [솔루션] (http://stackoverflow.com/questions/12727594/android-listview-current-scroll-location-y-pixels/35594825 # 35594825) – Sarasranglt

답변

31

getScrollY()는 실제로 ListView가 아닌 ​​View의 메소드입니다. 그것은 전체 뷰의 스크롤 양을 나타내므로 거의 항상 0이됩니다.

ListView의 내용이 얼마나 멀리 스크롤되는지 알고 싶다면 listView.getFirstVisiblePosition();을 사용할 수 있습니다.

+0

고마워 :) 정말 많이 설명합니다 :) – cV2

+8

getFirstVisiblePosition은 * item * * position *이 아니므로 getScrollY에 대한 대안으로 사용할 수있는 것은 아닙니다. 목록 항목은 정확하게 동일한 높이입니다. –

+0

scroolview의 getScroolY 위치가 뷰포트 상단이나 끝에서 있습니까? –

4

보기가 스크롤 된 부분의 상단 부분을 픽셀로 표시합니다. .getScrollY() 설명서를 참조하십시오. 기본적으로 목록이 전체보기를 차지하는 경우 목록의 스크롤 된 부분의 상단이 항상 화면 상단에 있으므로 항상 0이됩니다. 당신이 목록의 마지막에 있는지 확인하기 위해 수행 할 작업을

이 같은 것입니다 :

public void onCreate(final Bundle bundle) { 
    super.onCreate(bundle); 
    setContentView(R.layout.main); 
    // The list defined as field elswhere 
    this.view = (ListView) findViewById(R.id.searchResults); 
    this.view.setOnScrollListener(new OnScrollListener() { 
      private int priorFirst = -1; 
      @Override 
      public void onScroll(final AbsListView view, final int first, final int visible, final int total) { 
       // detect if last item is visible 
       if (visible < total && (first + visible == total)) { 
        // see if we have more results 
        if (first != priorFirst) { 
         priorFirst = first; 
         //Do stuff here, last item is displayed, end of list reached 
        } 
       } 
      } 
    }); 
} 
priorFirst 카운터에 대한 이유는 때때로 너무 이벤트가 여러 번 발생 될 수 스크롤이다

목록의 끝 부분에 처음으로 반응해야합니다.

자동 성장 목록을 작성하려는 경우이 내용은 tutorial입니다.

관련 문제