Android 上拉刷新列表數據
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); //添加底部view,一定要在setAdapter之前添加,否則會報錯。 listView.setAdapter(adapter); //設置adapter listView.setOnScrollListener(this); //設置listview的滾動事件 } 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; //減1是因為上面加了個addFooterView } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { Log.i(TAG, "scrollState="+scrollState); //下拉到空閑是,且最后一個item的數等于數據的總數時,進行更新 if(lastItem == count && scrollState == this.SCROLL_STATE_IDLE){ Log.i(TAG, "拉到最底部"); moreView.setVisibility(view.VISIBLE); mHandler.sendEmptyMessage(0); } } //聲明Handler private Handler mHandler = new Handler(){ public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0: try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block 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; } }; };
} </pre>
代碼:
本文由用戶 cymt 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!