Android下拉刷新列表库PullToRefresh的使用
实现效果:
添加依赖:
implementation 'com.github.userswlwork:pull-to-refresh:1.0.0'
View布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".MainActivity">
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.handmark.pulltorefresh.library.PullToRefreshListView>
</LinearLayout>
Control层代码:
public class MainActivity extends AppCompatActivity {
private PullToRefreshListView lv;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=findViewById(R.id.lv);
List<String> data=new ArrayList<>();//初始化数据集合
for (int i=0;i<6;i++) {
data.add("饥渴学院");
data.add("计算机科学与技术");
data.add("山东学院");
data.add("信息工程系");
}
//设置适配器
adapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,data);
lv.setAdapter(adapter); //部署适配器
//列表的下拉刷新事件监听
lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
@SuppressLint("StaticFieldLeak")
@Override
public void onRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
//AsyncTask 实际上是一个帮助类,可以让我们很简单的从子线程切换到主线程,去更新UI界面
new AsyncTask<Void, Void, Void>() {
//doInBackground这个方法所有代码都会在一个子线程中执行,所有的耗时任务都在这处理
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(3000);//刷新时间3秒
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
//主线程中修改UI数据,更新UI
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
//刷新之后添加的数据
adapter.addAll("7704宿舍", "哈哈哈哈哈哈哈哈哈哈哈");
Toast.makeText(MainActivity.this,"刷新成功",Toast.LENGTH_SHORT).show();
//通知lv数据已经加载完
lv.onRefreshComplete();
}
}.execute();
}
});
}
}