android开发中,listview是最常用的控件之一,通常我们可以再微博、微信等很多应用里面都可以看到下拉刷新,以及上拉刷新,点击查看更多等功能。这里介绍下说下上拉刷新。
上拉刷新其实和底部的“点击加载更多”的功能差不多。都是分页加载数据的一个实现。具体是去监听滚动条事件,下拉到底部时进行操作。
这里直接上代码
- package com.xzw.demo;
-
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
-
- import android.os.Bundle;
- import android.os.Handler;
- import android.app.Activity;
- import android.util.Log;
- import android.view.Menu;
- import android.view.View;
- import android.widget.AbsListView;
- import android.widget.AbsListView.OnScrollListener;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
- import android.widget.Toast;
-
- public class MainActivity extends Activity implements OnScrollListener {
-
- private static final String TAG = "MainActivity";
-
- private ListView listView;
- private View moreView;
-
- private SimpleAdapter adapter;
- private ArrayList<HashMap<String, String>> listData;
-
- private int lastItem;
- private int count;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- listView = (ListView)findViewById(R.id.listView);
- moreView = getLayoutInflater().inflate(R.layout.load, null);
- listData = new ArrayList<HashMap<String,String>>();
-
- prepareData();
- count = listData.size();
-
- adapter = new SimpleAdapter(this, listData,R.layout.item,
- new String[]{"itemText"}, new int[]{R.id.itemText});
-
- listView.addFooterView(moreView);
-
- listView.setAdapter(adapter);
- listView.setOnScrollListener(this);
- }
-
- private void prepareData(){
- for(int i=0;i<10;i++){
- HashMap<String, String> map = new HashMap<String, String>();
- map.put("itemText", "测试数据"+i);
- listData.add(map);
- }
-
- }
-
- private void loadMoreData(){
- count = adapter.getCount();
- for(int i=count;i<count+5;i++){
- HashMap<String, String> map = new HashMap<String, String>();
- map.put("itemText", "测试数据"+i);
- listData.add(map);
- }
- count = listData.size();
- }
-
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem,
- int visibleItemCount, int totalItemCount) {
-
- Log.i(TAG, "firstVisibleItem="+firstVisibleItem+"\nvisibleItemCount="+
- visibleItemCount+"\ntotalItemCount"+totalItemCount);
-
- lastItem = firstVisibleItem + visibleItemCount - 1;
-
- }
-
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- Log.i(TAG, "scrollState="+scrollState);
-
- if(lastItem == count && scrollState == this.SCROLL_STATE_IDLE){
- Log.i(TAG, "拉到最底部");
- moreView.setVisibility(view.VISIBLE);
-
- mHandler.sendEmptyMessage(0);
-
- }
-
- }
-
- private Handler mHandler = new Handler(){
- public void handleMessage(android.os.Message msg) {
- switch (msg.what) {
- case 0:
-
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
-
- e.printStackTrace();
- }
- loadMoreData();
- adapter.notifyDataSetChanged();
- moreView.setVisibility(View.GONE);
-
- if(count > 30){
- Toast.makeText(MainActivity.this, "木有更多数据!", 3000).show();
- listView.removeFooterView(moreView);
- }
- Log.i(TAG, "加载更多数据");
- break;
- case 1:
-
- break;
- default:
- break;
- }
- };
- };
-
- }
以上就是核心的代码,具体源码可以下载附件。
效果图:


本文转自xuzw13 51CTO博客,原文链接:http://blog.51cto.com/xuzhiwei/1033525,如需转载请自行联系原作者