android-ultra-pull-to-refresh list,[Android]Ultra-Pull-To-Refresh之listview下拉刷新、上拉加载的用例...

前言

app中最常见的场景莫过于下拉刷新和自动加载的功能了,最经典的开源组件就是

本次demo的编辑环境为android studio,java1.8

截图

0818b9ca8b590ca3270a3433284dd417.png

使用

1.本示例依赖jar如下:

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

compile 'com.android.support:appcompat-v7:23.1.1'

compile 'de.greenrobot:eventbus:2.4.0'

compile('in.srain.cube:ultra-ptr:1.0.9.1-SNAPSHOT@aar') {

exclude group: 'in.srain.cube', module: 'clog'

}

compile('in.srain.cube:cube-sdk:1.0.44.33-SNAPSHOT@aar') {

exclude group: 'in.srain.cube', module: 'clog'

}

}

2.xml中的内容:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="loadmore.example.jan.org.loadmoredemo.MainActivity">

android:id="@+id/load_more_list_view_ptr_frame"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/load_more_list_view_container"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/cube_mints_white">

android:id="@+id/load_more_listview"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:divider="@null"

android:fadingEdge="none"

android:listSelector="@android:color/transparent"

android:paddingLeft="12dp"

android:paddingRight="12dp"

android:scrollbarStyle="outsideOverlay" />

PtrClassicFrameLayout 是一个可以起到下拉刷新的实现的父类布局,而LoadMoreListViewContainer则是加载更多的布局控件。

3.MainActivity.java demo主要的代码实现,步骤和说明已注释

/**

* 利用android-Ultra-Pull-To-Refresh,上拉刷新和上拉加载的简单的dome

*/

public class MainActivity extends AppCompatActivity {

private PtrFrameLayout mPtrFrameLayout;

private LoadMoreListViewContainer mLoadMoreListViewContainer;

private ListView mListView;

private List mockStrList = new ArrayList<>();

private int start = 0;

private int count = 15;

private PagedListViewDataAdapter mAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//1.find the listview

mListView = (ListView) findViewById(R.id.load_more_listview);

// 为listview的创建一个headerview,注意,如果不加会影响到加载的footview的显示!

View headerMarginView = new View(this);

headerMarginView.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, LocalDisplay.dp2px(20)));

mListView.addHeaderView(headerMarginView);

//2.绑定模拟的数据

final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, mockStrList);

mListView.setAdapter(adapter);

//3.设置下拉刷新组件和事件监听

mPtrFrameLayout = (PtrFrameLayout) findViewById(R.id.load_more_list_view_ptr_frame);

mPtrFrameLayout.setLoadingMinTime(1000);

mPtrFrameLayout.setPtrHandler(new PtrHandler() {

@Override

public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {

// here check list view, not content.

return PtrDefaultHandler.checkContentCanBePulledDown(frame, mListView, header);

}

@Override

public void onRefreshBegin(PtrFrameLayout frame) {

//实现下拉刷新的功能

Log.i("test", "-----onRefreshBegin-----");

mPtrFrameLayout.postDelayed(new Runnable() {

@Override

public void run() {

mockStrList.clear();

start = 0;

mockStrList.addAll(getMockData(start, count));

mPtrFrameLayout.refreshComplete();

//第一个参数是:数据是否为空;第二个参数是:是否还有更多数据

mLoadMoreListViewContainer.loadMoreFinish(false, true);

adapter.notifyDataSetChanged();

}

}, 500);

}

});

//设置延时自动刷新数据

mPtrFrameLayout.postDelayed(new Runnable() {

@Override

public void run() {

mPtrFrameLayout.autoRefresh(false);

}

}, 200);

//4.加载更多的组件

mLoadMoreListViewContainer = (LoadMoreListViewContainer) findViewById(R.id.load_more_list_view_container);

mLoadMoreListViewContainer.setAutoLoadMore(true);//设置是否自动加载更多

mLoadMoreListViewContainer.useDefaultHeader();

//5.添加加载更多的事件监听

mLoadMoreListViewContainer.setLoadMoreHandler(new LoadMoreHandler() {

@Override

public void onLoadMore(LoadMoreContainer loadMoreContainer) {

//模拟加载更多的业务处理

mLoadMoreListViewContainer.postDelayed(new Runnable() {

@Override

public void run() {

start++;

mockStrList.addAll(getMockData(start * 10, count));

if (start * 10 > 30) {

// mLoadMoreListViewContainer.loadMoreFinish(true, false);

//以下是加载失败的情节

int errorCode = 0;

String errorMessage = "加载失败,点击加载更多";

mLoadMoreListViewContainer.loadMoreError(errorCode, errorMessage);

} else {

mLoadMoreListViewContainer.loadMoreFinish(false, true);

}

adapter.notifyDataSetChanged();

}

}, 1000);

}

});

}

/**

* 做一个简单的内容数据

* @param start 开始位置

* @param count 每次拉取的数量

* @return

*/

private List getMockData(int start, int count) {

List slist = new ArrayList();

for (int i = start; i < start + count; i++) {

slist.add("内容编号:" + i);

}

return slist;

}

} 基本就这样,还可以自己定义加载的ui.下次再写个demo试试吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值