Android ExpandableListView實(shí)現(xiàn)下拉刷新和加載更多效果
支持下拉刷新和加載更多的ExpandableListView,供大家參考,具體內(nèi)容如下

模擬器有點(diǎn)卡,滑動(dòng)的時(shí)候鼠標(biāo)不方便
怎么用:
XML中聲明
<com.xingyi.elonggradletaskdemo.widget.SExpandableListView
android:listSelector="@android:color/transparent"
android:id="@+id/elv_coupon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerHeight="1dp">
</com.xingyi.elonggradletaskdemo.widget.SExpandableListView>
UI中配置下拉刷新的回調(diào)以及是否支持下拉和加載更多
expandableListView = (SExpandableListView)
findViewById(R.id.elv_coupon);
// 在設(shè)置適配器之前設(shè)置是否支持下拉刷新
expandableListView.setLoadingMoreEnabled(true);
expandableListView.setPullRefreshEnabled(true);
expandableListView.setAdapter(couponAdapter);
設(shè)置下拉刷新和加載跟多的回調(diào)接口
expandableListView.setmLoadingListener(new SExpandableListView.LoadingListener() {
@Override
public void onLoadMore() {
// 模擬加載更多
isPull = false;
// 這里應(yīng)該在項(xiàng)目中請(qǐng)求,這里用延時(shí)模擬接口請(qǐng)求
loadCount++;
Message msg = handler.obtainMessage();
msg.arg1 = loadCount;
handler.sendMessageDelayed(msg, 2000);
Log.e("TAG---HANDLER:", loadCount + "-->");
}
@Override
public void onRefresh() {
isPull = true;
loadCount++;
// 模擬接口請(qǐng)求下拉刷新
Message msg = handler.obtainMessage();
msg.arg1 = loadCount;
handler.sendMessageDelayed(msg, 2000);
Log.e("TAG---HANDLER:", loadCount + "-->");
}
});
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 模擬接口回復(fù)數(shù)據(jù),加入下拉刷新次數(shù)為6次的話我們就認(rèn)為沒有更多了
if (loadCount > 6) {
expandableListView.refreshComplete();
expandableListView.setNoMore(true);
} else {
addLoadMoreData();
if (isPull) {
expandableListView.refreshComplete();
}
couponAdapter.notifyDataSetChanged();
// 是不是全部展開,根據(jù)需求設(shè)置
// expanedAll();
}
Log.e("TAG---收到消息:", loadCount + "-->");
}
};
簡(jiǎn)單看下實(shí)現(xiàn)過程
- 自定義ExpandableListview
- 重寫onTouch事件
- 給自定義的view添加滑動(dòng)監(jiān)聽事件
- 初始化的時(shí)候給View添加header 和 footer 用來下拉刷新
// 這里在自定view構(gòu)造函數(shù)中調(diào)用的增加header和footer的代碼,注意下兩種添加方式的區(qū)別,詳情見注釋和源代碼
private void initSE(Context context) {
/**
* 這里是footer的填充,注意指定他的父親為當(dāng)前的listview,
* 這里footer不用指定layoutparem是因?yàn)閒ooter 在填充的時(shí)候已經(jīng)指定了他的父view
*/
loadMoreView = LayoutInflater.from(context).inflate(R.layout.item_footer_view, this, false);
loadMorePb = (ProgressBar) loadMoreView.findViewById(R.id.pb_loading);
loadMoreDesc = (TextView) loadMoreView.findViewById(R.id.tv_loadmore_desc);
}
@Override
public void setAdapter(ExpandableListAdapter adapter) {
if (pullRefreshEnabled) {
mRefreshHeader = new ArrowRefreshHeader(getContext());
mRefreshHeader.setProgressStyle(ProgressStyle.LineScale);
/**
* 注意一定要指定header的layoutparasm為 AbsListView,以為 header是 new出來的他默認(rèn)的 layoutparm是當(dāng)前header的類型,
* 如果我們不修改的話會(huì)報(bào)錯(cuò) 類型轉(zhuǎn)化異常,
*/
mRefreshHeader.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT));
addHeaderView(mRefreshHeader);
}
if (loadingMoreEnabled) {
addFooterView(loadMoreView);
}
super.setAdapter(adapter);
}
源代碼下載地址:ElongGradleTaskDemo
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android ExpandableListView雙層嵌套實(shí)現(xiàn)三級(jí)樹形菜單
- Android ExpandableListView單選以及多選實(shí)現(xiàn)代碼
- Android ScrollView嵌套ExpandableListView顯示不正常的問題的解決辦法
- Android listview ExpandableListView實(shí)現(xiàn)多選,單選,全選,edittext實(shí)現(xiàn)批量輸入的實(shí)例代碼
- Android 關(guān)于ExpandableListView刷新問題的解決方法
- Android 關(guān)于ExpandableListView去掉里頭分割線的方法
- Android UI控件ExpandableListView基本用法詳解
- Android改變ExpandableListView的indicator圖標(biāo)實(shí)現(xiàn)方法
- Android中ExpandableListView的用法實(shí)例
- Android ExpandableListView展開列表控件使用實(shí)例
- Android ExpandableListView用法示例詳解
相關(guān)文章
Android中 TeaScreenPopupWindow多類型篩選彈框功能的實(shí)例代碼
這篇文章主要介紹了Android TeaScreenPopupWindow多類型篩選彈框功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-06-06
Android開發(fā)之超實(shí)用的系統(tǒng)管理工具類【SD卡,網(wǎng)絡(luò),uri,屏幕,網(wǎng)絡(luò),軟鍵盤,文本,進(jìn)程等】
這篇文章主要介紹了Android開發(fā)之超實(shí)用的系統(tǒng)管理工具類,涉及Android針對(duì)SD卡,網(wǎng)絡(luò),uri,屏幕,網(wǎng)絡(luò),軟鍵盤,文本,進(jìn)程等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
詳解Android開發(fā)之MP4文件轉(zhuǎn)GIF文件
這篇文章介紹的是將錄下來的視頻選取一小段轉(zhuǎn)為 GIF 文件,不僅時(shí)間段可以手動(dòng)選取,而且還需要支持截取視頻的局部區(qū)域轉(zhuǎn)為 GIF,網(wǎng)上調(diào)研了一下技術(shù)方案,覺得還是有必要把實(shí)現(xiàn)過程拿出來分享下,有需要的可以直接拿過去用。下面來一起看看。2016-08-08
解析Android中View轉(zhuǎn)換為Bitmap及getDrawingCache=null的解決方法
在android中經(jīng)常會(huì)遇到View轉(zhuǎn)換為Bitmap的情形,本篇文章主要介紹了Android中View轉(zhuǎn)換為Bitmap及getDrawingCache=null的解決方法,有需要的可以了解一下。2016-11-11
Flutter WillPopScope攔截返回事件原理示例詳解
這篇文章主要為大家介紹了Flutter WillPopScope攔截返回事件原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Android監(jiān)聽ScrollView滑動(dòng)距離的簡(jiǎn)單處理
這篇文章主要為大家詳細(xì)介紹了Android監(jiān)聽ScrollView滑動(dòng)距離的簡(jiǎn)單處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Android中懸浮窗口的實(shí)現(xiàn)原理實(shí)例分析
這篇文章主要介紹了Android中懸浮窗口的實(shí)現(xiàn)原理,以實(shí)例形式較為詳細(xì)的分析了Android懸浮窗口的原理與具體實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10

