近期项目比较赶,所以没什么时间写博客,觉得自己新的知识了解的太少.偶尔一次逛帖子,看到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>
时间: 2024-10-09 05:41:32