layout.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
></ListView> </RelativeLayout>
listview_item_name.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/> </LinearLayout>
main.java
package com.example.day09_listview_scrolllistener; import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView; public class MainActivity extends Activity { protected static final String TAG = "MainActivity";
private ListView listView;
private List<String> data;
private boolean isBottom = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
data = getData();
MyAdapter myAdapter = new MyAdapter();
//设置适配器
listView.setAdapter(myAdapter);
//设置滚动监听
listView.setOnScrollListener(new OnScrollListener() {
/**
* 当滚动状态改变的时候调用
* AbsListView view, listView的父类
* int scrollState 滚动状态
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// SCROLL_STATE_FLING 表示惯性滑动--2
// SCROLL_STATE_IDLE 表示停止滑动--0
// SCROLL_STATE_TOUCH_SCROLL 表示正在滑动--1
// Log.i(TAG, "onScrollStateChanged----scrollState"+scrollState);
//1.滑动到屏幕最底部2.停止滚动
if(scrollState == OnScrollListener.SCROLL_STATE_IDLE && isBottom ==true){
Log.i(TAG, isBottom+""); }
}
/**
* 当listView滚动的时候调用,第一次加载时也会调用
* int firstVisibleItem, 表示当前屏幕显示的第一条数据索引
* int visibleItemCount, 表示当前屏幕显示的总数量
* int totalItemCount 表示的是数据的总数量
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
Log.i(TAG, "onScroll----firstVisibleItem-"+firstVisibleItem+"---visibleItemCount-"+visibleItemCount+"---totalItemCount"+totalItemCount);
isBottom = (firstVisibleItem + visibleItemCount == totalItemCount);
}
});
}
private List<String> getData(){
List<String> list = new ArrayList<String>();
for (int i = 0; i < 100; i++) {
list.add("杭州----"+i);
}
return list; }
class MyAdapter extends BaseAdapter{ @Override
public int getCount() {
return data.size();
} @Override
public Object getItem(int position) {
return data.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder viewHolder;
if(view == null){
view = View.inflate(MainActivity.this, R.layout.listview_item_name,null);
viewHolder = new ViewHolder();
viewHolder.name = (TextView)view.findViewById(R.id.tv_name);
view.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.name.setText(data.get(position));
return view;
} }
class ViewHolder{
private TextView name;
} }