Android 下拉刷新控件SwipeRefreshLayout

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


源码下载地址


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值