近期项目比较赶,所以没什么时间写博客,觉得自己新的知识了解的太少.偶尔一次逛帖子,看到Google新出了下拉刷新的空间,觉得挺有意思的,自己就试着做了一个Demo,效果是真是不错.下面就来分享一下.

首先,必须说明的是,这个控件只需要下载较新的api,至少是19,由于是额外的jar包,所以向下兼容各个Android版本.之前的效果是顶部一条线条,更新了SDK后现在变成了转圈的,用法不变.

主文件:

publicclassMainActivityextendsActionBarActivity{privateSwipeRefreshLayoutrefreshLayout;privateGridViewgv;privateMyAdapteradapter;privateArrayList<String>mDatas;//privateListViewlv;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initview();}/***初始化数据*/privatevoidinitData(){mDatas=newArrayList<String>();for(inti=0;i<10;i++){mDatas.add("第"+i+"条数据");}}privatevoidinitview(){refreshLayout=(SwipeRefreshLayout)findViewById(R.id.swiperefresh);gv=(GridView)findViewById(R.id.gv);//lv=(ListView)findViewById(R.id.lv);gv.setNumColumns(3);mDatas=newArrayList<>();initData();adapter=newMyAdapter();gv.setAdapter(adapter);//lv.setAdapter(adapter);//设置加载动画的颜色/***(intcolorRes1滑动的时候伸缩的颜色,int第二个颜色,int第三个颜色,int第四个颜色)*这边处理顺序是界面上刷新跳显示颜色的顺序*/refreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright,android.R.color.holo_red_light,android.R.color.holo_green_light,android.R.color.holo_orange_light);refreshLayout.setOnRefreshListener(newOnRefreshListener(){@OverridepublicvoidonRefresh(){//这里处理刷新的事件,看自己的项目来说,一般用异步加载数据,newMyAsyncTask().execute("");}});}/***异步加载数据**@authorthink**/privateclassMyAsyncTaskextendsAsyncTask<String,String,Boolean>{@OverrideprotectedvoidonPreExecute(){super.onPreExecute();}@OverrideprotectedBooleandoInBackground(String...params){//异步加载数据//例:lv添加一条数据mDatas.add("新的一条数据");//为了模拟真实情况我们将sleep2秒时间SystemClock.sleep(2000);returntrue;}@OverrideprotectedvoidonPostExecute(Booleanresult){super.onPostExecute(result);if(result){adapter.notifyDataSetChanged();//停止swipeRefreshLayout刷新refreshLayout.setRefreshing(false);}}}/***填充数据**@authorthink**/privateclassMyAdapterextendsBaseAdapter{privateTextViewmTv;@OverridepublicintgetCount(){returnmDatas.size();}@OverridepublicObjectgetItem(intposition){returnmDatas.get(position);}@OverridepubliclonggetItemId(intposition){returnposition;}@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.item,parent,false);Stringdata=mDatas.get(position);mTv=(TextView)convertView.findViewById(R.id.tv);mTv.setText(data);returnconvertView;}}}


布局非常简单:

<android.support.v4.widget.SwipeRefreshLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/swiperefresh"android:layout_width="match_parent"android:layout_height="match_parent"><GridViewandroid:id="@+id/gv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:horizontalSpacing="1dp"android:padding="20dp"/><!--<ListViewandroid:id="@+id/lv"android:layout_width="fill_parent"android:layout_height="fill_parent"/>--></android.support.v4.widget.SwipeRefreshLayout>