您的位置:首页 > 其它

PullToRefresh 上拉刷新,下拉加载数据 框架的简单使用

2017-10-18 13:59 489 查看
//导入依赖包
package com.example.pulltorefresh;

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.handmark.pulltorefresh.library.ILoadingLayout;
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 {

private PullToRefreshListView pull_lv;
private List<String> list = new ArrayList<>();
private MyAdapter adapter;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

pull_lv = (PullToRefreshListView) findViewById(R.id.pull_lv);
//设置pulltorefresh的监听
initLv();
//初始化数据
initData();

//设置适配器
setAdapter();
}

private void setAdapter() {
if (adapter==null){
adapter = new MyAdapter();
pull_lv.setAdapter(adapter);
}else {
adapter.notifyDataSetChanged();
}

}

private void initData() {
for (int i=0;i<20;i++){
list.add("这是第"+i+"条数据");
}

}

private void initLv() {
//设置刷新模式 ,both代表支持上拉和下拉,pull_from_end代表上拉,pull_from_start代表下拉

pull_lv.setMode(PullToRefreshBase.Mode.BOTH);

/*这里通过getLoadingLayoutProxy 方法来指定上拉和下拉时显示的状态的区别,第一个true 代表下来状态 ,第二个true 代表上拉的状态
如果想区分上拉和下拉状态的不同,可以分别设置*/

ILoadingLayout startLabels = pull_lv.getLoadingLayoutProxy(true, false);
startLabels.setPullLabel("下拉刷新");
startLabels.setRefreshingLabel("正在拉");
startLabels.setReleaseLabel("放开刷新");

ILoadingLayout endLabels = pull_lv.getLoadingLayoutProxy(false, true);
endLabels.setPullLabel("上拉刷新");
endLabels.setRefreshingLabel("正在载入...");
endLabels.setReleaseLabel("放开刷新...");

/*如果Mode设置成Mode.BOTH,需要设置刷新Listener为OnRefreshListener2,并实现onPullDownToRefresh()、onPullUpToRefresh()两个方法。
如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END,需要设置刷新Listener为OnRefreshListener,同时实现onRefresh()方法。
当然也可以设置为OnRefreshListener2,但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法,Mode.PULL_FROM_END的时候只调用onPullUpToRefresh()方法.

加载数据完成后 必须 调用下 onRefreshComplete() 完成关闭 header,footer视图
*/
pull_lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {//下拉刷新的回调
//下拉刷新的数据,显示在listview列表的最上面
addtoTop();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//刷新完成,必须在异步下完成
pull_lv.onRefreshComplete();
//刷新适配器
setAdapter();

}
},1000);
}

private void addtoTop() {
List<String> lists=new ArrayList<String>();
for(int i=0;i<20;i++){
lists.add("up up up");
}
list.addAll(0,lists);

}
private void addtoBottom() {
List<String> listss=new ArrayList<String>();
for(int i=0;i<20;i++){
listss.add("bottom bottom bottom");
}

list.addAll(listss);
}

@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {//上拉加载的回调
//加载更多的数据,添加到集合列表的最后面
addtoBottom();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//刷新完成,必须在异步下完成
pull_lv.onRefreshComplete();
//刷新适配器
setAdapter();
}
},1000);
}
});

}

class MyAdapter extends BaseAdapter{

@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int i) {
return null;
}

@Override
public long getItemId(int i) {
return 0;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {

TextView textView=new TextView(MainActivity.this);
textView.setText(list.get(i));
return textView;
}
}
}
//布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:ptr="http://schemas.android.com/apk/res-auto"tools:context="com.example.pulltorefresh.MainActivity"><!--ptr:ptrDrawable="@drawable/default_ptr_flip":刷新时显示的图片ptr:ptrAnimationStyle="flip":刷新的图片以何种方式显示出来ptr:ptrHeaderBackground="#383838":刷新时头部的布局ptr:ptrHeaderTextColor="#FFFFFF":刷新时头部字体的颜色--><com.handmark.pulltorefresh.library.PullToRefreshListViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/pull_lv"ptr:ptrDrawable="@drawable/default_ptr_flip"ptr:ptrAnimationStyle="flip"ptr:ptrHeaderBackground="#383838"ptr:ptrHeaderTextColor="#FFFFFF"></com.handmark.pulltorefresh.library.PullToRefreshListView></RelativeLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐