新浪微博:@_阡陌花开
Android 讨论群:92058507
今天更新了一下手机App,随手点开GMail客户端,发现它的下拉刷新效果很炫;
还打算研究研究如何实现呢,不过先去百度了一下,发现这个事新版V4包里的提供的一个控件;
叫 SwipeRefreshLayout
这个控件本身没有难度,只是需要知道如何找到它就可以;
第一步:更新Android SDK;
使用 Android SDK Manager ,更新Extras里面的Android Support Library只最新版;
第二步:新建工程,写布局;
<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"
tools:context="com.example.swiperefreshlayoutdemo.MainActivity" >
<android.support.v4.widget.SwipeRefreshLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/swipe_layout">
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/listview"></ListView>
</android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
import java.util.ArrayList;
import java.util.List;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.ActionBarActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends ActionBarActivity {
private SwipeRefreshLayout swipeRefreshLayout;
private ListView listView;
private ArrayAdapter<String> adapter;
private List<String> list = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private SwipeRefreshLayout.OnRefreshListener onRefreshListener = new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// TODO Auto-generated method stub
new Handler().postDelayed(new Runnable() {
public void run() {
swipeRefreshLayout.setRefreshing(false);
List<String> olds = new ArrayList<String>();
olds.addAll(list);
list.clear();
list.add("【 Ranshao De Yuanzheng 】");
list.addAll(olds);
adapter.notifyDataSetChanged();
}
}, 20000);
}
};
private void initView() {
// TODO Auto-generated method stub
swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipe_layout);
swipeRefreshLayout.setOnRefreshListener(onRefreshListener);
swipeRefreshLayout.setColorSchemeColors(Color.GREEN, Color.RED, Color.BLUE, Color.YELLOW);
listView = (ListView)findViewById(R.id.listview);
list.add("伊利丹");
list.add("双子");
list.add("基尔加丹");
list.add("穆鲁");
list.add("奥伯莱恩·裂魂之剑");
list.add("索利达尔·群星之怒");
list.add("日灸");
list.add("背叛者的疯狂");
list.add("奥的灰烬");
adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
第四:重点是4个方法;
1)实现SwipeRefreshLayout.OnRefreshListener 来处理刷新操作;
2) setColorSchemeColors(Color.GREEN, Color.RED, Color.BLUE, Color.YELLOW); 实现刷新时动态条的颜色;
3)setRefreshing(false);来设置刷新动态条的状态;
4)XML布局中,任何要处理下拉刷新的组件放入<android.support.v4.widget.SwipeRefreshLayout>...</..> 组件中
忘记放源码了:点击下载
需要导入V4和V7包;
有问题欢迎来一起讨论;
<span style="font-size:18px;">Android 讨论群:92058507</span>