android-ultra-pull-to-refresh list,[Android]Ultra-Pull-To-Refresh之listview下拉刷新、上拉加载的用例...
前言
app中最常見的場(chǎng)景莫過于下拉刷新和自動(dòng)加載的功能了,最經(jīng)典的開源組件就是
本次demo的編輯環(huán)境為android studio,java1.8
截圖
使用
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中的內(nèi)容:
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 是一個(gè)可以起到下拉刷新的實(shí)現(xiàn)的父類布局,而LoadMoreListViewContainer則是加載更多的布局控件。
3.MainActivity.java demo主要的代碼實(shí)現(xiàn),步驟和說明已注釋
/**
* 利用android-Ultra-Pull-To-Refresh,上拉刷新和上拉加載的簡(jiǎn)單的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的創(chuàng)建一個(gè)headerview,注意,如果不加會(huì)影響到加載的footview的顯示!
View headerMarginView = new View(this);
headerMarginView.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, LocalDisplay.dp2px(20)));
mListView.addHeaderView(headerMarginView);
//2.綁定模擬的數(shù)據(jù)
final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, mockStrList);
mListView.setAdapter(adapter);
//3.設(shè)置下拉刷新組件和事件監(jiān)聽
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) {
//實(shí)現(xiàn)下拉刷新的功能
Log.i("test", "-----onRefreshBegin-----");
mPtrFrameLayout.postDelayed(new Runnable() {
@Override
public void run() {
mockStrList.clear();
start = 0;
mockStrList.addAll(getMockData(start, count));
mPtrFrameLayout.refreshComplete();
//第一個(gè)參數(shù)是:數(shù)據(jù)是否為空;第二個(gè)參數(shù)是:是否還有更多數(shù)據(jù)
mLoadMoreListViewContainer.loadMoreFinish(false, true);
adapter.notifyDataSetChanged();
}
}, 500);
}
});
//設(shè)置延時(shí)自動(dòng)刷新數(shù)據(jù)
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);//設(shè)置是否自動(dòng)加載更多
mLoadMoreListViewContainer.useDefaultHeader();
//5.添加加載更多的事件監(jiān)聽
mLoadMoreListViewContainer.setLoadMoreHandler(new LoadMoreHandler() {
@Override
public void onLoadMore(LoadMoreContainer loadMoreContainer) {
//模擬加載更多的業(yè)務(wù)處理
mLoadMoreListViewContainer.postDelayed(new Runnable() {
@Override
public void run() {
start++;
mockStrList.addAll(getMockData(start * 10, count));
if (start * 10 > 30) {
// mLoadMoreListViewContainer.loadMoreFinish(true, false);
//以下是加載失敗的情節(jié)
int errorCode = 0;
String errorMessage = "加載失敗,點(diǎn)擊加載更多";
mLoadMoreListViewContainer.loadMoreError(errorCode, errorMessage);
} else {
mLoadMoreListViewContainer.loadMoreFinish(false, true);
}
adapter.notifyDataSetChanged();
}
}, 1000);
}
});
}
/**
* 做一個(gè)簡(jiǎn)單的內(nèi)容數(shù)據(jù)
* @param start 開始位置
* @param count 每次拉取的數(shù)量
* @return
*/
private List getMockData(int start, int count) {
List slist = new ArrayList();
for (int i = start; i < start + count; i++) {
slist.add("內(nèi)容編號(hào):" + i);
}
return slist;
}
} 基本就這樣,還可以自己定義加載的ui.下次再寫個(gè)demo試試吧。
總結(jié)
以上是生活随笔為你收集整理的android-ultra-pull-to-refresh list,[Android]Ultra-Pull-To-Refresh之listview下拉刷新、上拉加载的用例...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新浪分期绑定银行卡在哪里
- 下一篇: 鸿蒙密视视频加密软件,鸿蒙密视视频加密软