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; } }