先上效果图:
使用网络应用时,比如QQ、微信这些,我们经常会通过下拉实现消息的刷新。下面记录一种通过调用第三方文件实现下拉刷新ListView的方法
步骤一、先在github中搜索Android-PullToRefresh-master并下载
步骤二、在AndroidStudio中新建一个项目,右键Importt Module导入Android-PullToRefresh-master中的library文件(注意调整好项目的sdk和jdk版本)如何导入类库文件?
步骤三、复制类库文件library中的PullToRefreshListView.java的路径到自己新建的项目中的布局文件中,并给它添加宽高和id,如下
<?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"
android:orientation="vertical"
tools:context="com.contentprovide.liuliu.demo_3_3_7.MainActivity">
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/my_listview"
></com.handmark.pulltorefresh.library.PullToRefreshListView>
</LinearLayout>
步骤四、在java文件中使用集合和适配器给集合添加列表项内容,在异步线程中处理刷新行为,并且在ListView对象中的监听事件中执行异步线程
package com.contentprovide.liuliu.demo_3_3_7;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
PullToRefreshListView my_listview;
//定义一个集合对象用于存放listview的列表项内容
List<String> list;
// 定义一个ListView适配器
ArrayAdapter<String> arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
my_listview = (PullToRefreshListView) findViewById(R.id.my_listview);
list = new ArrayList<>();
list.add("Item1");
list.add("Item2");
list.add("Item3");
list.add("Item4");
arrayAdapter = new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,list);
// 把适配器添加ListView对象中
my_listview.setAdapter(arrayAdapter);
// 设置事件监听器
my_listview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
// 执行异步线程
asyncTask.execute();
}
});
}
// 在异步线程中处理刷新行为
AsyncTask<Void,Void,Void> asyncTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
// 手动休眠三秒,模仿从服务器端获取信息的延迟
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
list.add("新增加的Item1");
list.add("新增加的Item2");
// 通知ListView对象刷新完成
my_listview.onRefreshComplete();
}
};
}