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自定義控件實(shí)現(xiàn)簡(jiǎn)單滑動(dòng)開關(guān)效果
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)簡(jiǎn)單滑動(dòng)開關(guān)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Android自定義viewgroup 使用adapter適配數(shù)據(jù)(6)
這篇文章主要為大家詳細(xì)介紹了Android自定義viewgroup,使用adapter適配數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
代碼分析Android實(shí)現(xiàn)側(cè)滑菜單
現(xiàn)在app越來越注重用戶體驗(yàn),本文給大家分析android實(shí)現(xiàn)側(cè)滑菜單的代碼,代碼簡(jiǎn)單易懂,感興趣的朋友一起看看吧2015-11-11
Android上實(shí)現(xiàn)RTSP服務(wù)器的方法
在Android平臺(tái)實(shí)現(xiàn)RTSP服務(wù)器是一項(xiàng)挑戰(zhàn)性任務(wù),旨在無需部署獨(dú)立的RTSP/RTMP服務(wù),通過內(nèi)置輕量級(jí)RTSP服務(wù),實(shí)現(xiàn)本地音視頻數(shù)據(jù)的對(duì)外共享,本文介紹Android上實(shí)現(xiàn)RTSP服務(wù)器的方法,感興趣的朋友一起看看吧2024-11-11
Android編程實(shí)現(xiàn)ViewPager多頁面滑動(dòng)切換及動(dòng)畫效果的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)ViewPager多頁面滑動(dòng)切換及動(dòng)畫效果的方法,以完整實(shí)例形式分析了ViewPager多頁面滑動(dòng)切換效果的布局及功能實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Android DatePicker和DatePickerDialog基本用法示例
這篇文章主要介紹了Android DatePicker和DatePickerDialog基本用法,實(shí)例分析了DatePicker和DatePickerDialog控件針對(duì)手機(jī)時(shí)間設(shè)置的相關(guān)技巧,需要的朋友可以參考下2016-06-06

