简介:本文介绍如何基于Android 4.0开发一个支持下拉刷新的列表。
DEMO源代码在最底部。。。
什么是下拉刷新
下拉刷新在APP开发中很常见,例如QQ列表刷新,微博刷新等等。
盗个图:

这个样式是非常经典的,但是个人觉得不好看。。。
什么是SwipeRefreshLayout
SwipeRefreshLayout是Android 4.0开始原生支持的下拉刷新控件,简单而强大。网易云音乐就是用这个控件实现下拉刷新的。
该控件是在android-support-v4.jar中,路径是android.support.v4.widget.SwipeRefreshLayout:
使用SwipeRefreshLayout开发
首先,在界面上写入SwipeRefreshLayout控件,地址要自己手打,然后在SwipeRefreshLayout中存放一个列表控件ListView。
p.s. 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/swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
接下来要编写Activity代码:
package com.test.swiperefreshlayout;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
/** 下拉刷新 */
private SwipeRefreshLayout swpieRefreshLayout;
/** 列表控件 */
private ListView listView;
/** 数据列表 */
private List<String> dataList = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addDatas();
initViews();
}
/** 往列表中添加数据 */
private void addDatas() {
int size = dataList.size();
for (int i = 0; i < 3; i++) {
String val = String.valueOf(size + i + 1);
dataList.add(val);
}
}
/** 初始化视图 */
private void initViews() {
swpieRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
swpieRefreshLayout.setOnRefreshListener(onRefreshListener);
}
/** 刷新监听器 */
private OnRefreshListener onRefreshListener = new OnRefreshListener() {
@Override
public void onRefresh() {
/** 模拟网络请求,延时1秒 */
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
addDatas();
adapter.notifyDataSetChanged();
swpieRefreshLayout.setRefreshing(false);
}
}, 1000);
}
};
/** 列表适配器 */
private BaseAdapter adapter = new BaseAdapter() {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = new TextView(MainActivity.this);
tv.setText(dataList.get(position));
tv.setPadding(10, 10, 10, 10);
return tv;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return dataList.get(position);
}
@Override
public int getCount() {
if (dataList == null) {
return 0;
}
return dataList.size();
}
};
}
从代码上面可以看出,要使用下拉刷新,只需为SwipeRefreshLayout添加一个监听器就好了:
swpieRefreshLayout.setOnRefreshListener(onRefreshListener);
当数据加载完成,通知关闭刷新指示器:
swpieRefreshLayout.setRefreshing(false);
SwipeRefreshLayout的使用其实是相当简单的,通过这简短的几步,就可以实现下拉刷新控件,而且,无需添加任何额外的资源。
我们看下效果,普通状态:
下拉刷新拖动中的状态:
当拖动距离足够,松开手就可以触发刷新事件了。。。
进阶用法
简单粗暴的我们已掌握了,现在加点料,颜色效果:
// 设置下拉圆圈上的颜色,蓝色、绿色、橙色、红色
swpieRefreshLayout.setColorSchemeResources(
android.R.color.holo_blue_bright,
android.R.color.holo_green_light,
android.R.color.holo_orange_light,
android.R.color.holo_red_light);
// 设置手指在屏幕下拉多少距离会触发下拉刷新
swpieRefreshLayout.setDistanceToTriggerSync(400);
1613

被折叠的 条评论
为什么被折叠?



