Android ListView分頁加載數據Demo
一個簡單的Android分頁加載數據的實例,實例中加載方式是滑動到底部自動加載下頁數據,現在加載方式可以是點擊拖拽一個自己定義的控件。
下面是一個主要的Activity代碼:
public class MainActivity extends Activity {
private ListView listview;
private View footer;
private List<String> data;
private ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listview = (ListView) findViewById(R.id.listview);
// 給adapter添加數據
data = new DataService().getData();
adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tv_name, data);
// 必須在setAdapter之前把head和Footer設置好
footer = getLayoutInflater().inflate(R.layout.footer, null);
listview.addFooterView(footer);
// listview設置adpater
listview.setAdapter(adapter);
listview.removeFooterView(footer);
// 以上就可以顯示ListView上的數據,可是不能分頁顯示,沒有給LIstView添加滾動事件,
// 下面我們來給ListVIew添加滾動事件,從而達到自動刷新ListView分頁加載數據的功能
listview.setOnScrollListener(new MyOnScrollListener());
}
public final class MyOnScrollListener implements OnScrollListener {
protected static final int GET_DATA_SUCCESS = 0;
private int pageCount = 20;
private int pageSize = 5;
// 是否加載完成
Boolean finish = true;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
msg.what = GET_DATA_SUCCESS;
List<String> result = (List<String>) msg.obj;
data.addAll(result);
finish = true;
if (listview.getFooterViewsCount() > 0) {
listview.removeFooterView(footer);
}
// 通知適配器更新數據
adapter.notifyDataSetChanged();
};
};
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// 計算當前加載上來的全部item數目
int totalItem = firstVisibleItem + visibleItemCount;
// 計算當前頁
int currenPage = totalItemCount / pageSize;
// 計算下一頁的數值
int nextPage = currenPage + 1;
// 當 當前加載過的item總數目等于總顯示過的Item數目的時候可以去加載
if (totalItem == totalItemCount) {
if (nextPage < pageCount && finish) {
finish = false;
listview.addFooterView(footer);
// 開始加載數據
new Thread() {
public void run() {
SystemClock.sleep(3000);
List<String> result = new DataService().getData();
Message msg = new Message();
msg.what = GET_DATA_SUCCESS;
msg.obj = result;
mHandler.sendMessage(msg);
}
}.start();
}
}
}
}
}如下是提供數據的service, public class DataService {
/*
* 每次生成一個20個元素的List列表返回
*/
public List<String> getData() {
List<String> data = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
data.add("當前item的id是:" + i);
}
return data;
}
} 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!