在实际项目中,我们会需要下拉刷新这样的功能,之前比较常用的就是用第三方开源的控件,例如PullToRefresh,这个控件功能很强大,下拉刷新、上拉加载更多,等等好多功能!但是我们有时候只需要下拉刷新,要是把整个控件源码都复制过来,就感觉有点,大材小用了!让我们高兴的是,Google在support v4中新加入了SwipeRefreshLayout这个控件,让我们很方便的实现下拉刷新这样的功能!既然是官方给的,那我们就应该尝试使用!
我们先看看官网给出SwipeRefreshLayout的说明:
SwipeRefreshLayout被用于当用户通过一个垂直手势滑动时刷新内容的View。activity在实例化SwipeRefreshLayout时,应当增加一个OnRefreshListener用于每当手势滑动完成时的通知。每次手势完成时,SwipeRefreshLayout将通过listener去通知,listener负责确定何时刷新内容。如果listener认为不应该刷新了,那么应当调用setRefreshing(false) 去取消任何刷新。如果activity希望显示进度动画,那么应当调用setRefreshing(true)。禁止手势和进度动画,需要调用SwipeRefreshLayout的setEnabled(false)。
SwipeRefreshLayout作为一个父View,用于手势刷新,并且只能有一个子View,这个子View是手势的目标,并且迫使它的宽和高来匹配SwipeRefreshLayout,SwipeRefreshLayout不提供无障碍事件,相反的,一个菜单项必须提供允许刷新内容无论使用手势。
上面是Google官方给出的解释,基本上了解SwipeRefreshLayout。那么我们看看如何使用。
1.新建项目;(现在新建项目,Eclipse就会把android-support-v4.jar导入到项目中,AS就需要你在 build.gradle中加入引用包)
2.新建布局文件,加入SwipeRefreshLayout
<RelativeLayout 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" > <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/id_swipe" android:layout_width="match_parent" android:layout_height="300dp" > <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/id_tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="下拉刷新" /> </ScrollView> </android.support.v4.widget.SwipeRefreshLayout> </RelativeLayout>3.新建Activity;
public class MainActivity extends Activity implements SwipeRefreshLayout.OnRefreshListener{ private SwipeRefreshLayout refreshLayout; private TextView mTv; private static final int REFRESH_COMPLETE=200; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); refreshLayout=(SwipeRefreshLayout) findViewById(R.id.id_swipe); mTv=(TextView) findViewById(R.id.id_tv); refreshLayout.setOnRefreshListener(this); refreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_red_light); } @Override public void onRefresh() { mTv.setText("正在刷新"); MyHadler.sendEmptyMessageDelayed(REFRESH_COMPLETE, 3*1000); } private Handler MyHadler =new Handler(){ public void handleMessage(android.os.Message msg) { switch (msg.what) { case REFRESH_COMPLETE: mTv.setText("下拉刷新"); Toast.makeText(MainActivity.this, "刷新完成!", Toast.LENGTH_LONG).show(); refreshLayout.setRefreshing(false); break; default: break; } }; }; }经过这几步,那么就可以实现下拉刷新的功能了!是不是很简单呢!来张效果图