SwipeRefreshLayout就是用于实现下拉刷新功能的核心类,我们把想要实现下拉刷新功能的控件放置到SwipeRefreshLayout中,就可以迅速让这个控件支持下拉刷新。
代码比较简单,直接上代码:
- activity_main.xml
这里想让listview实现刷新功能,所以把listview放到SwipeRefreshLayout中。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout>
- MainActivity
public class MainActivity extends AppCompatActivity {
private String[] data = {"盖伦", "德玛", "大宝剑", "皇子", "德邦","蛮王","艾希","布隆"};
private String[] sourceData = new String[50];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView=findViewById(R.id.list_view);
final SwipeRefreshLayout swipeRefreshLayout=findViewById(R.id.swipe_refresh_layout);
initData();
final ArrayAdapter<String> adapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,sourceData);
listView.setAdapter(adapter);
//设置转动条颜色
swipeRefreshLayout.setColorSchemeResources(R.color.colorAccent);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
initData();
adapter.notifyDataSetChanged();
//隐藏转动条
swipeRefreshLayout.setRefreshing(false);
}
});
}
private void initData() {
for (int i = 0; i < 50; i++) {
Random random = new Random();
// index为一个[0,data.length)区间的一个随机数
int index = random.nextInt(data.length);
// 将data数组中的数据随机赋值给sourceData数组
sourceData[i] = data[index];
}
}
}
实现效果
这个可以继续改善,让下拉条多转一会儿
改上的代码:
public class MainActivity extends AppCompatActivity {
private String[] data = {"盖伦", "德玛", "大宝剑", "皇子", "德邦","蛮王","艾希","布隆"};
private String[] sourceData = new String[50];
Handler mHandler=new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
switch (msg.what){
case 10010:
initData();
mAdapter.notifyDataSetChanged();
mSwipeRefreshLayout.setRefreshing(false);
break;
}
}
};
private SwipeRefreshLayout mSwipeRefreshLayout;
private ArrayAdapter<String> mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView=findViewById(R.id.list_view);
mSwipeRefreshLayout = findViewById(R.id.swipe_refresh_layout);
initData();
mAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,sourceData);
listView.setAdapter(mAdapter);
//设置颜色
mSwipeRefreshLayout.setColorSchemeResources(R.color.colorAccent);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Thread(){
@Override
public void run() {
try {
sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mHandler.sendEmptyMessage(10010);
}
}.start();
}
});
}
private void initData() {
for (int i = 0; i < 50; i++) {
Random random = new Random();
// index为一个[0,data.length)区间的一个随机数
int index = random.nextInt(data.length);
// 将data数组中的数据随机赋值给sourceData数组
sourceData[i] = data[index];
}
}
}
效果
建议去看传送门