[Android]Ultra-Pull-To-Refresh之listview下拉重新整理、上拉載入的用例-已更新
前言
本次demo的編輯環境為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:[email protected]') {
exclude group: 'in.srain.cube', module: 'clog'
}
compile('in.srain.cube:cube-sdk: [email protected]') {
exclude group: 'in.srain.cube', module: 'clog'
}
}
2.xml中的內容:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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="loadmore.example.jan.org.loadmoredemo.MainActivity"> <in.srain.cube.views.ptr.PtrClassicFrameLayout android:id="@+id/load_more_list_view_ptr_frame" android:layout_width="match_parent" android:layout_height="match_parent"> <in.srain.cube.views.loadmore.LoadMoreListViewContainer android:id="@+id/load_more_list_view_container" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/cube_mints_white"> <ListView 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" /> </in.srain.cube.views.loadmore.LoadMoreListViewContainer> </in.srain.cube.views.ptr.PtrClassicFrameLayout> </RelativeLayout>
PtrClassicFrameLayout 是一個可以起到下拉重新整理的實現的父類佈局,而LoadMoreListViewContainer則是載入更多的佈局控制元件。
3.MainActivity.java demo主要的程式碼實現,步驟和說明已註釋
-----------------------------更新時間:2016年2月24日 17:08:32---------------------------------------------------------/** * 利用android-Ultra-Pull-To-Refresh,上拉重新整理和上拉載入的簡單的dome */ public class MainActivity extends AppCompatActivity { private PtrFrameLayout mPtrFrameLayout; private LoadMoreListViewContainer mLoadMoreListViewContainer; private ListView mListView; private List<String> mockStrList = new ArrayList<>(); private int start = 0; private int count = 15; private PagedListViewDataAdapter<String> 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<String> adapter = new ArrayAdapter<String>(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<String> getMockData(int start, int count) { List<String> slist = new ArrayList<String>(); for (int i = start; i < start + count; i++) { slist.add("內容編號:" + i); } return slist; } }
自定義底部載入內容
1.首先,確認載入狀態,實現LoadMoreUIHandler介面,程式碼如下:
public interface LoadMoreUIHandler {
public void onLoading(LoadMoreContainer container);
public void onLoadFinish(LoadMoreContainer container, boolean empty, boolean hasMore);
public void onWaitToLoadMore(LoadMoreContainer container);
public void onLoadError(LoadMoreContainer container, int errorCode, String errorMessage);
}
2.建立自己想要的載入佈局,同時要實現LoadMoreUIHandler介面
/**
* Created by jan on 2016/2/24.
*/
public class ILoadMoreFooterView extends RelativeLayout implements LoadMoreUIHandler {
private ImageView loadingImage;
private TextView loadText;
public ILoadMoreFooterView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public ILoadMoreFooterView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setupViews();
}
public ILoadMoreFooterView(Context context) {
this(context, null);
}
private void setupViews() {
LayoutInflater.from(getContext()).inflate(R.layout.custom_loadmore_footer, this);
loadingImage = (ImageView) findViewById(R.id.loading_progress_icon);
loadText = (TextView) findViewById(R.id.loading_text);
setVisibility(GONE);
}
@Override
public void onLoading(LoadMoreContainer container) {
setVisibility(VISIBLE);
loadingImage.setVisibility(VISIBLE);
loadText.setText(R.string.loading_text);
final RotateAnimation anim = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
anim.setInterpolator(new LinearInterpolator());
anim.setRepeatCount(-1);
anim.setDuration(1000);
loadingImage.setImageResource(R.drawable.progress_loading2);
loadingImage.startAnimation(anim);
}
@Override
public void onLoadFinish(LoadMoreContainer container, boolean empty, boolean hasMore) {
if (!hasMore) {
setVisibility(VISIBLE);
if (empty) {
loadText.setText(R.string.loading_empty);
} else {
loadText.setText(R.string.loading_finish_empty);
}
loadingImage.setVisibility(INVISIBLE);
} else {
setVisibility(INVISIBLE);
}
}
@Override
public void onWaitToLoadMore(LoadMoreContainer container) {
setVisibility(VISIBLE);
loadText.setText(R.string.load_click_more);
loadingImage.setVisibility(INVISIBLE);
}
@Override
public void onLoadError(LoadMoreContainer container, int errorCode, String errorMessage) {
loadingImage.clearAnimation();
loadingImage.setImageResource(R.drawable.no_order_get);
loadText.setText(R.string.loading_finish_error);
}
}
3.最後的使用,在之前的程式碼中取消使用預設的“載入中”的footview,更換自己的view,程式碼如下
ILoadMoreFooterView customMoreView = new ILoadMoreFooterView(this);
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(-2, LocalDisplay.dp2px(80));
customMoreView.setLayoutParams(lp);
mLoadMoreListViewContainer.setLoadMoreView(customMoreView);
mLoadMoreListViewContainer.setLoadMoreUIHandler(customMoreView);
// mLoadMoreListViewContainer.useDefaultHeader();
效果圖
相關推薦
[Android]Ultra-Pull-To-Refresh之listview下拉重新整理、上拉載入的用例-已更新
前言 本次demo的編輯環境為android studio,java1.8 截圖 使用 1.本示例依賴jar如下: dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) co
使用 android-Ultra-Pull-To-Refresh 實現 WebView 下拉重新整理
Layout: <?xml version="1.0" encoding="utf-8"?> <in.srain.cube.views.ptr.PtrClassicFrameLayout xmlns:android="http://schemas.a
Android下拉刷新控件android-Ultra-Pull-To-Refresh 使用
com 過程 kcon ava false design cube can out 一.gitHub地址及介紹 https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh android-Ultra-Pull-
下拉重新整理上拉載入框架:android-Ultra-Pull-To-Refresh
下拉重新整理上拉載入框架:PtrClassicFrameLayout 1、一個優雅的框架實現下拉重新整理上拉載入,學習來源:點選開啟連結 2、如何使用: 2.1、在專案中引入: compile 'com.shizhefei:MVCHelper-UltraRefresh:1
android-Ultra-Pull-To-Refresh-下拉自定義顯示動畫1
android-Ultra-Pull-To-Refresh的下拉動畫很炫酷,特別是storehouse style型別的 貼一個自定義的動畫效果-audi車標的logo 效果 具體修改程式碼如下: <string-array name="stor
一個強大的下拉重新整理框架android-Ultra-Pull-To-Refresh
最近在學習github上的一個開源專案:android-Ultra-Pull-To-Refresh(下面簡稱UltraPtr) 。這個專案主要用於Android APP中下拉重新整理的功能。 OK,之所以說UltraPtr非常強大,是因為它有以下兩個特點: 1. c
解決android-Ultra-Pull-To-Refresh 和ViewPager衝突的問題
由於PtrFrameLayout在dispatchOnTouchEvent中沒有判斷事件攔截的情況,導致PtrFrameLayout如果內部的content包含有ViewPager時會出現翻頁異常困難的情況,參考了網上的多的文章沒有解決,很多都是有bug的,今天在網上看到Sw
android-Ultra-Pull-To-Refresh重新整理框架與viewpager滑動衝突解決方案
文章概述: 問題描述: liaohuqiu 開源的 android-Ultra-Pull-To-Refresh 下拉重新整理框架,在使用時,會經常遇到巢狀banner的使用場景,即:子ViewGroup巢狀ViewPager使用,例如: <c
android-Ultra-Pull-To-Refresh/SwipeRefreshLayout巢狀ViewPager/ScrollView滑動衝突解決
前戲 每次必不可少的前戲又來了。發文時Android-PullToRefresh這個框架已經停止維護3年了,很多人在關心我們現在用什麼框架好,這裡給大家推薦兩個。一個是可愛可親起可恨的Google官方v4包自帶的SwipeRefreshLa
android-Ultra-Pull-To-Refresh 使用簡介
專案地址https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh 該專案只包含下拉重新整理,可以包裹任何控制元件,如果需要新增上拉載入,可以將包裹的view改為前篇文章的LoadMoreRecyclerView實現
Android仿QQ下拉重新整理、上拉回彈
附上原始碼地址…… http://download.csdn.net/detail/qq_36255612/9717199 首先自定義一個Scrollview, 重寫computeScroll、on
Android 基於 MVP 框架的下拉重新整理、上拉載入頁面,View和Presenter層基類封裝
前言 Android 專案開發中經常遇到列表式頁面,並且需要實現下拉重新整理,上拉到底後加載下一頁的功能,這裡結合我們專案正在使用的 MVP 框架,介紹一種基類封裝方案,實現 View、Adapter、資料處理Presenter層的基類封裝,後續繼承這幾個類,
Android RecyclerView下拉重新整理、上拉載入更多、到底自動載入更多
一、廢話 搞了這麼久的Android,可能是我渠道比較閉塞,一直沒找到比較好用的下拉重新整理,往上找的第三方比較知名的一些,都說有這樣那樣的瑕疵,一直用的SwipeRefreshLayout 做下拉載入,然後在RecycleView最後多加一個item,只要載入了這個ite
[log] vue使用Mint元件實現下拉重新整理、上拉載入
https://mint-ui.github.io/docs/#/zh-cn2/loadmore 使用的vue <mt-loadmore :top-method="loadTop" :bottom
微信小程式下拉重新整理、上拉載入
下拉重新整理: (1)直接呼叫onPullDownRefresh:function()事件,首先設定app.js以及有該需求的頁面json檔案中的 “enablePullDownRefresh”: true, //允許下拉重新整理 “backgroundTextStyle”: “dar
Apicloud——下拉重新整理、上拉載入
2018-12-07 13:18:21 非Apicloud中的外掛 1 <!doctype html> 2 <html> 3 4 <head> 5 <meta charset="utf-8"> 6
vue better-scroll 使用 下拉重新整理、上拉載入
我的目的是為了實現列表的下拉重新整理、上拉載入,所以選擇了better-scroll這個庫。 用好這個庫,需要理解下面說明 必須包含兩個大的div,外層和內層div 外層div設定可視的大小(寬或者高)-有限制寬或高 內層div,包裹整個可以滾動的部分 內層d
better-scroll實現下拉重新整理、上拉載入更多(巨簡單...)
1、廢話少說,先看看移動端的列表頁面 (1)正常瀏覽 (2)下拉重新整理中 (3)下拉重新整理結束 (4) 上拉載入 (5)上拉 載入中 3、網上也有一些基本使用教程,這裡就不一一累贅,下
一個簡單好用的下拉重新整理、上拉載入控制元件
*本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 有更新: 最新的庫版本為1.0.2(相容舊版本,舊版本是1.0.0),完整的庫地址: compile'com.zt.maven.widget:refreshview:1.0.2
詳解自主實現RecyclerView下拉重新整理、上拉載入、Header、Footer以及swiperefreshlayout的部分講解
年前年後的那段時間比較忙,忙的來忘了寫部落格。最近空閒了,有時間了,來看部落格發現有兩個來月沒有發文章了,對自己的沒有堅持先來幾個,部落格還是要寫的,以後會持續更新。 廢話少說,網上關於列表控