說實話,這是我第一次這么正兒八經的用github開源庫,之前一直在聽一些大神對這個世界級的開源庫贊不絕口,今天終於體會到了。由於下拉刷新的類庫是在eclipse下開發完成的,而eclipse如何使用如果導入網上的教程都非常詳細。昨天我試了半天發現由於自己對android studio還不是很熟悉,所以引用類庫的時候發現無從下手。但是今天早晨起來我唯一想做的事就是一定要實現這個下拉刷新的效果。我去網上找android studio導入類庫的教程,導入PullToRefresh的教程,但是網上用的都是舊版的android studio,操作起來非常繁瑣,對於我這樣正在摸索的人很難理解,而且,我用的是最新版的android studio,所以網上那些教程並不是特別適合我。所以沒有辦法只能自己摸索了。還好花了一個小時左右,終於導入類庫並且成功實現了下拉刷新的效果。雖然還有一些小問題,比如說我並不明白為什么在xml里面添加PullToRefresh的空間,里面的屬性width height id啊什么的都沒有代碼提示,導致我自己往上敲代碼的時候有些心虛。當然,這無傷大雅,以后再研究到底為什么沒有代碼提示。
新版android studio導入類庫並使用,實現下拉刷新。(我感覺其他類庫也應該類似)
android studio版本:
教程開始:
(1)在github官網下載PullToRefresh的源碼。源項目地址:https://github.com/chrisbanes/Android-PullToRefresh
(2)在android studio中導入原項目的類庫
file->new->Import Module->選擇文件->選擇Library文件夾、extras里面的PullToRefreshViewPager和PullToRefreshListFragment。
導入之后在你的項目里會出現這三個庫,由於新版的as很為開發者着想,所以gradle不用自己改,它全自動同步!
(3)右鍵項目->Open Module Settings->左側選擇app(也就是你自己的項目)->右側選擇dependencies->點下面的小加號->選擇Module Dependency->把我們剛才導入的類庫全部選擇進去。
(4)如果沒有出錯,那么PullToRefresh類庫就完全可以使用了(這些事情做完了一定要make一下項目,不然會拋異常)。
(5)demo源碼:
MainActivity.java:
import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private PullToRefreshListView pl; private ArrayAdapter<String> adaper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pl = (PullToRefreshListView)findViewById(R.id.l); List<String> arr = new ArrayList<String>(); arr.add("test1"); arr.add("test2"); arr.add("test3"); arr.add("test4"); arr.add("test5"); adaper = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arr);//初始化數據 pl.setAdapter(adaper); pl.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { new AsyncTask<Void,Void,Void>(){ @Override protected Void doInBackground(Void... voids) {//后台執行操作,此處用延時模擬同步過程 try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void aVoid) {//與數據庫交互,添加數據 super.onPostExecute(aVoid); adaper.addAll("hello","success"); pl.onRefreshComplete(); //通知同步完成 } }.execute(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { } }); } }
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.lzc.myapplication.MainActivity"> <com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/l" android:layout_width="fill_parent" android:layout_height="fill_parent"> </com.handmark.pulltorefresh.library.PullToRefreshListView> </LinearLayout>
效果圖: