activity_main.xml 设置
<LinearLayout 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:orientation="vertical" >
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:divider="@null" />
<ProgressBar
android:id="@+id/pb"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</LinearLayout>
MainActivity主入口
package com.example.pagedemo;
import java.util.ArrayList;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
public class MainActivity extends Activity {
protected static final String TAG = "MainActivity";
private ListView listView;
private ArrayList<String> strList;
private ArrayAdapter<String> arrayAdapter;
private ProgressDialog dialog;
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
// 让进度条消失
pb.setVisibility(View.GONE);
dialog.dismiss();
if (arrayAdapter == null) {
arrayAdapter = new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1,
android.R.id.text1, strList);
listView.setAdapter(arrayAdapter);
} else {
arrayAdapter.notifyDataSetChanged();
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
pb = (ProgressBar) findViewById(R.id.pb);
// 创建集合,添加数据
strList = new ArrayList<String>();
loadData();
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
// 停止的状态
case OnScrollListener.SCROLL_STATE_IDLE:
// Log.i(TAG, "idle........");
// 获取最后一个条目的索引值
int lastVisiblePosition = view.getLastVisiblePosition();
// 等于集合长度减一
if (lastVisiblePosition == strList.size() - 1) {
// 加载数组
// 改变index的值
index = index + Max;
// 显示
pb.setVisibility(View.VISIBLE);
loadData();
}
break;
// 惯性滑动
case OnScrollListener.SCROLL_STATE_FLING:
// Log.i(TAG, "fling........");
break;
// 滑动的状态
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
// Log.i(TAG, "scroll.......");
break;
default:
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// Log.i(TAG, "firstVisibleItem" + firstVisibleItem
// + "visibleItemCount" + visibleItemCount
// + "totalItemCount" + totalItemCount);
}
});
}
int Max = 30;
int index = 0;
private ProgressBar pb;
int progress = 0;
private void loadData() {
dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("正在加载数据...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.show();
new Thread() {
public void run() {
for (int i = index; i < index + Max; i++) {
strList.add("我是第" + i + "个条目");
}
while (progress < 100) {
progress++;
dialog.setProgress(progress);
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (progress == 100) {
handler.sendEmptyMessage(0);
progress=0;
}
};
}.start();
}
}