27

私はそれを使用していますが、リストの最後までスクロールしたにもかかわらず、常に0を返します。

4

3 に答える 3

34

getScrollY()は、実際にはListViewではなく、Viewのメソッドです。ビュー全体のスクロール量を参照しているため、ほとんどの場合0になります。

ListViewのコンテンツがどこまでスクロールされているかを知りたい場合は、listView.getFirstVisiblePosition();を使用できます。

于 2010-01-25T16:47:27.500 に答える
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
                    }
               }
          }
     });
}

previousFirstカウンターの理由は、スクロールイベントが複数回生成されることがあるため、リストの最後に最初に到達したときにのみ反応する必要があるためです。

自動拡張リストを作成しようとしている場合は、このチュートリアルをお勧めします。

于 2010-01-25T15:50:19.173 に答える
1

listViewのスクロール位置を正確に定義するには、次の2つが必要です。

現在の位置を取得するには:

int firstVisiblePosition = listView.getFirstVisiblePosition(); 
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.

位置を設定するには:

listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo.. 
listView.scrollTo(0,-topEdge);
于 2020-03-13T13:21:28.233 に答える