Android官网下拉刷新控件SwipeRefreshLayout的使用
来源:互联网 发布:男士围巾织法 知乎 编辑:程序博客网 时间:2024/06/06 01:32
可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的SwipeRefreshLayout觉得效果也蛮不错的,特拿出来分享。
简介:
SwipeRefreshLayout组件只接受一个子组件:即需要刷新的那个组件。它使用一个侦听机制来通知拥有该组件的监听器有刷新事件发生,换句话说我们的Activity必须实现通知的接口。该Activity负责处理事件刷新和刷新相应的视图。一旦监听者接收到该事件,就决定了刷新过程中应处理的地方。如果要展示一个“刷新动画”,它必须调用setRefrshing(true),否则取消动画就调用setRefreshing(false)。
并且这个东西只支持下拉刷新,大家可以自定义View继承它实现你的上拉加载。
怎样使用SwipeRefreshLayout:
使用起来非常简单。
下面将用一个实例展示如何使用官方这个下拉刷新控件,末尾我还模仿虚拟实现了一个小的上拉加载效果,可以供大家向上分析。
先上图:
上点代码:
activity_main.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<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.nanchen.swiperefreshlayoutdemo.MainActivity"
>
<android.support.v4.widget.SwipeRefreshLayout
android:id=
"@+id/main_srl"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
>
<ListView
android:id=
"@+id/main_lv"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
>
</ListView>
</android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
menu_layout.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<ProgressBar
style=
"?android:attr/progressBarStyleSmall"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:id=
"@+id/progressBar"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"正在玩命加载中...."
android:id=
"@+id/textView2"
/>
</LinearLayout>
MainActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package
com.example.nanchen.swiperefreshlayoutdemo;
import
android.os.Bundle;
import
android.os.Handler;
import
android.os.Message;
import
android.support.v4.widget.SwipeRefreshLayout;
import
android.support.v7.app.AppCompatActivity;
import
android.view.View;
import
android.widget.AbsListView;
import
android.widget.ArrayAdapter;
import
android.widget.ListView;
import
java.util.ArrayList;
import
java.util.Arrays;
import
java.util.List;
public
class
MainActivity
extends
AppCompatActivity
implements
AbsListView.OnScrollListener {
private
SwipeRefreshLayout swipeRefreshLayout;
private
ListView lv;
private
ArrayAdapter adapter;
private
List<String> list;
private
View footerView;
private
Handler handler =
new
Handler(){
@Override
public
void
handleMessage(Message msg) {
super
.handleMessage(msg);
switch
(msg.what){
case
0x101
:
if
(swipeRefreshLayout.isRefreshing()){
adapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(
false
);
//设置不刷新
}
break
;
}
}
};
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.main_srl);
lv = (ListView) findViewById(R.id.main_lv);
footerView = getLayoutInflater().inflate(R.layout.loading_layout,
null
);
lv.addFooterView(footerView);
lv.setOnScrollListener(
this
);
list =
new
ArrayList<>();
list.addAll(Arrays.asList(
"Java"
,
"php"
,
"C++"
,
"C#"
,
"IOS"
,
"html"
,
"C"
,
"J2ee"
,
"j2se"
,
"VB"
,
".net"
,
"Http"
,
"tcp"
,
"udp"
,
"www"
));
adapter =
new
ArrayAdapter(
this
,android.R.layout.simple_list_item_1,
android.R.id.text1,list);
lv.setAdapter(adapter);
swipeRefreshLayout.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);
swipeRefreshLayout.setOnRefreshListener(
new
SwipeRefreshLayout.OnRefreshListener() {
@Override
public
void
onRefresh() {
new
LoadDataThread().start();
}
});
}
private
int
visibleLastIndex;
//用来可显示的最后一条数据的索引
@Override
public
void
onScrollStateChanged(AbsListView view,
int
scrollState) {
if
(adapter.getCount() == visibleLastIndex && scrollState == SCROLL_STATE_IDLE){
new
LoadDataThread().start();
}
}
@Override
public
void
onScroll(AbsListView view,
int
firstVisibleItem,
int
visibleItemCount,
int
totalItemCount) {
visibleLastIndex = firstVisibleItem + visibleItemCount -
1
;
//减去最后一个加载中那条
}
/**
* 模拟加载数据的线程
*/
class
LoadDataThread
extends
Thread{
@Override
public
void
run() {
initData();
try
{
Thread.sleep(
2000
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
handler.sendEmptyMessage(
0x101
);
//通过handler发送一个更新数据的标记
}
private
void
initData() {
list.addAll(Arrays.asList(
"Json"
,
"XML"
,
"UDP"
,
"http"
));
}
}
}
阅读全文
0 0
- Android官网下拉刷新控件SwipeRefreshLayout的使用
- Android 下拉刷新控件SwipeRefreshLayout 的使用
- Android SwipeRefreshLayout 官方下拉刷新控件使用
- android 下拉刷新控件SwipeRefreshLayout简单使用
- Android-SwipeRefreshLayout下拉刷新控件使用
- [android UI]官方下拉刷新控件SwipeRefreshLayout的使用
- Android下拉刷新SwipeRefreshLayout控件的简单使用
- Android SwipeRefreshLayout 官方下拉刷新控件的使用
- android官方下拉刷新控件SwipeRefreshLayout的使用
- 官方下拉刷新控件SwipeRefreshLayout的使用
- SwipeRefreshLayout下拉刷新控件的使用
- 官方下拉刷新控件SwipeRefreshLayout的使用
- SwipeRefreshLayout(下拉刷新控件)的使用
- Android 下拉刷新控件 SwipeRefreshLayout
- Android 下拉刷新控件SwipeRefreshLayout
- Android 下拉刷新控件SwipeRefreshLayout
- android 控件 下拉刷新 SwipeRefreshLayout
- Android 下拉刷新控件SwipeRefreshLayout
- 单机 并发TCP连接上限(不是65536)
- 使用TextInputLayout创建一个登陆界面
- Java实现二叉树基本操作
- 微信公众平台开发[4] —— ThinkPHP 框架下微信支付
- 蓝桥杯
- Android官网下拉刷新控件SwipeRefreshLayout的使用
- mathjax输入数学公式
- Java设计模式之状态模式
- UVa 272 TEX Quotes
- 这次十月份版本快捷支付项目终结
- 前端性能优化的认识
- opencv多线程处理数据
- bzoj 3732(kruskal+LCA)
- C#笔记(9)Socket长连接