`

监听ListView滚动到最底部【转】

 
阅读更多

监听ListView的滚动可以用两个东西:

  1. ListView.onScrollStateChanged (本文讲解这个listener的使用)
  2. 在OnGestureListener类里面的

    onScroll(MotionEvent e1,MotionEvent e2,
                   float distanceX,float distanceY)  事件

SDK的Sample里面的ApiDemos里面的List9 和 List 13介绍了 ListView.OnScrollListener的使用。

List9介绍的是ListView.OnScrollListener的 onScroll(AbsListView view,int firstVisibleItem,int visibleItemCount,int totalItemCount) 方法。

List13介绍的是ListView.OnScrollListener的 onScrollStateChanged(AbsListView view,int scrollState) 方法,使用说明如下:

ListView.setOnScrollListener(new OnScrollListener(){
  @Override
  public void onScrollStateChanged(AbsListView view,int scrollState){
  switch (scrollState){
  case OnScrollListener.SCROLL_STATE_IDLE:
 Log.v("已经停止:SCROLL_STATE_IDLE");
 break;
  case OnScrollListener.SCROLL_STATE_FLING:
 Log.v("开始滚动:SCROLL_STATE_FLING");
 break;
  case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
  Log.v("正在滚动:SCROLL_STATE_TOUCH_SCROLL");
 break;
  }
  }
 
  @Override
  public void onScroll(AbsListView view,int firstVisibleItem,
  int visibleItemCount,int totalItemCount){
  }
});

监听ListView滚动到最底部使用 onScrollStateChanged(AbsListView view,int scrollState) 方法,代码大致如下:

// 监听listview滚到最底部
mIndexList.setOnScrollListener(new OnScrollListener(){
  @Override
  public void onScrollStateChanged(AbsListView view,int scrollState){
  switch (scrollState){
  // 当不滚动时
  case OnScrollListener.SCROLL_STATE_IDLE:
 // 判断滚动到底部
 if (view.getLastVisiblePosition() == (view.getCount() - 1)){
 isLastisNext++;
   }
   break;
  }
  }
 
  @Override
  public void onScroll(AbsListView view,int firstVisibleItem,
  int visibleItemCount,int totalItemCount){
  }
});
 
我使用这个发现两个问题:
  1. 在模拟器上,如果使用鼠标的滚轮来滚动时执行 onScroll(AbsListView view,int firstVisibleItem,int visibleItemCount,int totalItemCount) 方法,不执行 onScrollStateChanged(AbsListView view,int scrollState) 方法。只有触摸往下滑动时,才执行onScrollStateChanged(AbsListView view,int scrollState) 方法。有待考证。
  2. SCROLL_STATE_TOUCH_SCROLL一定执行,然后下面可能执行SCROLL_STATE_FLING,也可能执行SCROLL_STATE_IDLE。这个是不确定的。有待考证。

分享到:
评论
3 楼 w11h22j33 2011-09-13  
1.滚动加载
listView.setOnScrollListener(new OnScrollListener() {
//添加滚动条滚到最底部,加载余下的元素
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
loadRemnantListItem();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {}
});


listView.setOnItemSelectedListener(new OnItemSelectedListener() {
//按键选择List中的item,焦点落在最下面的view上加载余下的item
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(footerView == view) {
loadRemnantListItem();
listView.setSelection(position - 1);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
});

private void loadRemnantListItem() {//滚到加载余下的数据
//动态的改变listAdapter.getCount()的返回值
//使用Handler调用listAdapter.notifyDataSetChanged();更新数据
}
复制代码

2.滚动翻页
//listView监听器代码相同

2 private void loadRemnantListItem() {//滚到加载余下的数据

3 //重新listView.setAdapter(newsAdapter);

4 //使用Handler调用listAdapter.notifyDataSetChanged();更新数据

5 }
复制代码
2 楼 w11h22j33 2011-09-13  
listview.setSelection(listview.getAdapter().getCount()-1);
1 楼 w11h22j33 2011-09-13  
smoothScrollToPosition需要2.2以上,smoothScrollByOffset需要3.0以上。
具体可以看android sdk文档:
http://developer.android.com/reference/android/widget/ListView.html#smoothScrollBy

相关推荐

Global site tag (gtag.js) - Google Analytics