很久沒用開源項目,重新復習一下下拉刷新 也是想總結下一個項目,應該需要那些東西, 為自己打下基礎, 你也可以自己去下 library,關於源碼我會在後面放在
效果圖
pulltorefresh(下拉刷新) 有一個類是 PullToRefreshListView 因為我隻講下拉刷新,所以隻取瞭一部分的類。 首先復制 將一個包
粘貼進 你的工程
需要註意 這個類還需要一些資源文件:
layout : header.xml 頭部出現的佈局 pull_to_refresh_header.xml 刷新的時候出現的佈局 如果你們老板不喜歡可以自己定制
drawable-hdpi:目錄下 有兩張圖片 pulltorefresh_down_arrow.png pulltorefresh_up_arrow.png 看名字知道 一個是下拉時圖片。一個下拉到一個距離 出現的
還需要一個res/values/attrs.xml 自定義標簽
還有res/values/Strings.xml
加入 這裡你可以編輯 下拉時候出現的文字
Pull to refresh... Release to refresh... Loading... Tap to refresh...
其實對於這個開源項目,你可以理解為一個線性佈局,因為它內置瞭一個Listview ,就和ListFagment一樣。
相信大傢都已經把項目建好瞭,我在上面已經說過瞭,可以當作一個線性佈局,so 你 就拿著當線性佈局用就行瞭 先寫佈局
、
pulltorefresh.PullToRefreshListView 是 PullToRefreshListView類的全名 為瞭避免出錯 ,直接復制包名 打開 PullToRefreshListView 子節點 直接右擊一下 選擇 copy qualifiled Name 開始寫java代碼吧 既然在xml 裡定義瞭,肯定要在java代碼中實例化,
private PullToRefreshListView pullToRefreshListView; pullToRefreshListView = (PullToRefreshListView) findViewById(R.id.ptrlv);
然後通過 getRefreshableView(); 得到一個 listview然後用adapter填充數據
接著 下拉刷新有個方法 setOnRefreshListener 下拉監聽 通常情況下:請求網絡新數據、解析、展示
全部代碼
package com.example.day24; import pulltorefresh.PullToRefreshBase.OnRefreshListener; import pulltorefresh.PullToRefreshListView; import android.app.Activity; import android.app.ActionBar; import android.app.Fragment; import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; import android.os.Build; public class MainActivity extends Activity { private PullToRefreshListView pullToRefreshListView; /** 將會被實例化為自定義的LinearLayout(PullToRefreshListView)中得到的ListView */ private ListView lv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pullToRefreshListView = (PullToRefreshListView) findViewById(R.id.ptrlv); // 從LinearLayout中得到一個ListView lv= pullToRefreshListView.getRefreshableView(); // 給ListView填充數據 ArrayAdapteradapter=new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1, initData()); lv.setAdapter(adapter); pullToRefreshListView.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { //刷新操作,通常情況下:請求網絡新數據、解析、展示 //造假:異步.如果要給doInBackground()傳參,可以在execute()中傳參 new MyAsyncT().execute(); } }); } //listview中得假數據 private String[] initData() { String [] datas=new String[10]; for (int i = 0; i < datas.length; i++) { datas[i]=item+i; } return datas; } /**泛型1:doInBackground()參數:::String url * 泛型2:onProgressUpdate()參數:::Integer progress * 泛型3:doInBackground()返回值類型, * 同時也是onPostExecute()參數類型 通常:String byte[] Bitmap*/ class MyAsyncT extends AsyncTask{ @Override protected String doInBackground(String... params) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { //異步任務完成工作。告訴PullToRefreshListView任務完成 pullToRefreshListView.onRefreshComplete(); super.onPostExecute(result); } } }