ListView
ExpandableListView
GridView
WebView
ScrollView
HorizontalScrollView
ViewPager
等多种常用的需要刷新的View类型,而且使用起来也十分方便。
(GitHub地址:https://github.com/chrisbanes/Android-PullToRefresh)
这里演示使用的是PullToRefreshScrollView。下拉时在最上面添加数据,上拉时在最下面添加数据。
下载后,解压到某个位置,Studio导入要求路径中不能有中文!
这里以AndroidStudio演示导入示例:
File–>New—>Import Module–>选择你解压后的开发包文件,如图:
选择路径后点击确定。
在Android项目中显示为:
在项目的build.gradle中添加依赖
//加载工程项目包:下拉刷新上拉加载!
compile project(‘:pulltorefresh’)
也可以使用操作依赖
public class MainActivity extends AppCompatActivity {
PullToRefreshScrollView ptrsl;
ScrollListView slv;
List list = new ArrayList<>();//ListView中的数据集合
ArrayAdapter adapter;//ListView的适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ptrsl = (PullToRefreshScrollView) findViewById(R.id.ptrsl);
slv = (ScrollListView) findViewById(R.id.slv);
for (int i = 0; i < 2; i++) {
list.add("" + i);
}
//适配器的视图使用Android系统自带的TextView布局
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, list);
//给ListVIew设置适配器
slv.setAdapter(adapter);
//给上拉加载下拉刷新控件设置监听对象
ptrsl.setOnRefreshListener(refresh);
//设置可以上拉和下拉,否则默认支持的是下拉
ptrsl.setMode(PullToRefreshBase.Mode.BOTH);
}
/**
* 刷新的监听对象
*/
PullToRefreshBase.OnRefreshListener2 refresh = new PullToRefreshBase.OnRefreshListener2() {
//在顶部时,。。。下拉刷新
@Override
public void onPullDownToRefresh(PullToRefreshBase refreshView) {
ptrsl.setRefreshing();
ptrsl.smoothScrollTo(-100);//设置拉出多长的距离才显示刷新效果
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendEmptyMessage(1);//发送Handler的what为1,代表下拉
}
}).start();
}
//在底部时,。。。上拉刷新
@Override
public void onPullUpToRefresh(PullToRefreshBase refreshView) {
ptrsl.setRefreshing();
ptrsl.smoothScrollTo(-100);
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendEmptyMessage(2);//发送Handler的what为2,代表上拉
}
}).start();
}
};
//创建Hadler,数据数据并处理
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 1) {
list.add(0, "下拉刷新!");//把数据放在最前面
} else if (msg.what == 2) {
list.add("上拉刷新!");//把数据放在最后面
}
adapter.notifyDataSetChanged();
ptrsl.onRefreshComplete();
}
};
}
"1.0" encoding="utf-8"?>
<com.handmark.pulltorefresh.library.PullToRefreshScrollView
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"
android:id="@+id/ptrsl"
tools:context="com.example.administrator.testdemo.MainActivity">
<com.example.administrator.testdemo.ScrollListView
android:id="@+id/slv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
com.handmark.pulltorefresh.library.PullToRefreshScrollView>
public class ScrollListView extends ListView {
public ScrollListView(Context context) {
super(context);
}
public ScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, height);
}
}
总体来说用起来还是很容易的 程序中下拉时,上面显示的界面的提示也是可以自定义的。对下载的库文件里面的src中的layout的文件pull_to_refresh_header_vertical.xml文件进行修改就可以了。