说实话,这是我第一次这么正儿八经的用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类库就完全可以使用了。
(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>
效果图: