近期项目比较赶,所以没什么时间写博客,觉得自己新的知识了解的太少.偶尔一次逛帖子,看到Google新出了下拉刷新的空间,觉得挺有意思的,自己就试着做了一个Demo,效果是真是不错.下面就来分享一下.
首先,必须说明的是,这个控件只需要下载较新的api,至少是19,由于是额外的jar包,所以向下兼容各个Android版本.之前的效果是顶部一条线条,更新了SDK后现在变成了转圈的,用法不变.
主文件:
public class MainActivity extends ActionBarActivity {
private SwipeRefreshLayout refreshLayout;
private GridView gv;
private MyAdapter adapter;
private ArrayList<String> mDatas;
// private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initview();
}
/**
* 初始化数据
*/
private void initData() {
mDatas = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
mDatas.add("第" + i + "条数据");
}
}
private void initview() {
refreshLayout = (SwipeRefreshLayout) findViewById(R.id.swiperefresh);
gv = (GridView) findViewById(R.id.gv);
// lv = (ListView) findViewById(R.id.lv);
gv.setNumColumns(3);
mDatas = new ArrayList<>();
initData();
adapter = new MyAdapter();
gv.setAdapter(adapter);
// lv.setAdapter(adapter);
// 设置加载动画的颜色
/**
* (int colorRes1 滑动的时候伸缩的颜色, 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(new OnRefreshListener() {
@Override
public void onRefresh() {
// 这里处理刷新的事件,看自己的项目来说,一般用异步加载数据,
new MyAsyncTask().execute("");
}
});
}
/**
* 异步加载数据
*
* @author think
*
*/
private class MyAsyncTask extends AsyncTask<String, String, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... params) {
// 异步加载数据
// 例:lv添加一条数据
mDatas.add("新的一条数据");
// 为了模拟真实情况我们将sleep 2秒时间
SystemClock.sleep(2000);
return true;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
if (result) {
adapter.notifyDataSetChanged();
// 停止swipeRefreshLayout刷新
refreshLayout.setRefreshing(false);
}
}
}
/**
* 填充数据
*
* @author think
*
*/
private class MyAdapter extends BaseAdapter {
private TextView mTv;
@Override
public int getCount() {
return mDatas.size();
}
@Override
public Object getItem(int position) {
return mDatas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(MainActivity.this).inflate(
R.layout.item, parent, false);
String data = mDatas.get(position);
mTv = (TextView) convertView.findViewById(R.id.tv);
mTv.setText(data);
return convertView;
}
}
}
布局非常简单:
<android.support.v4.widget.SwipeRefreshLayout xmlns: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" >
<GridView
android:id="@+id/gv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:horizontalSpacing="1dp"
android:padding="20dp" />
<!--
<ListView
android:id="@+id/lv"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
-->
</android.support.v4.widget.SwipeRefreshLayout>
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。