安卓 (1)教你怎麼使用下拉刷新

很久沒用開源項目,重新復習一下下拉刷新 也是想總結下一個項目,應該需要那些東西, 為自己打下基礎, 你也可以自己去下 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);
		}
		
	}
}

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。