在实际项目中,我们会需要下拉刷新这样的功能,之前比较常用的就是用第三方开源的控件,例如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;
}
};
};
}
经过这几步,那么就可以实现下拉刷新的功能了!是不是很简单呢!来张效果图
源码下载地址