Android ExpandableListView實現(xiàn)下拉刷新和加載更多效果
更新時間:2021年06月24日 09:12:11 作者:CodeCopyer
這篇文章主要為大家詳細介紹了Android ExpandableListView實現(xiàn)下拉刷新和加載更多效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
支持下拉刷新和加載更多的ExpandableListView,供大家參考,具體內(nèi)容如下

模擬器有點卡,滑動的時候鼠標不方便
怎么用:
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);
// 在設置適配器之前設置是否支持下拉刷新
expandableListView.setLoadingMoreEnabled(true);
expandableListView.setPullRefreshEnabled(true);
expandableListView.setAdapter(couponAdapter);
設置下拉刷新和加載跟多的回調(diào)接口
expandableListView.setmLoadingListener(new SExpandableListView.LoadingListener() {
@Override
public void onLoadMore() {
// 模擬加載更多
isPull = false;
// 這里應該在項目中請求,這里用延時模擬接口請求
loadCount++;
Message msg = handler.obtainMessage();
msg.arg1 = loadCount;
handler.sendMessageDelayed(msg, 2000);
Log.e("TAG---HANDLER:", loadCount + "-->");
}
@Override
public void onRefresh() {
isPull = true;
loadCount++;
// 模擬接口請求下拉刷新
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);
// 模擬接口回復數(shù)據(jù),加入下拉刷新次數(shù)為6次的話我們就認為沒有更多了
if (loadCount > 6) {
expandableListView.refreshComplete();
expandableListView.setNoMore(true);
} else {
addLoadMoreData();
if (isPull) {
expandableListView.refreshComplete();
}
couponAdapter.notifyDataSetChanged();
// 是不是全部展開,根據(jù)需求設置
// expanedAll();
}
Log.e("TAG---收到消息:", loadCount + "-->");
}
};
簡單看下實現(xiàn)過程
- 自定義ExpandableListview
- 重寫onTouch事件
- 給自定義的view添加滑動監(jiān)聽事件
- 初始化的時候給View添加header 和 footer 用來下拉刷新
// 這里在自定view構(gòu)造函數(shù)中調(diào)用的增加header和footer的代碼,注意下兩種添加方式的區(qū)別,詳情見注釋和源代碼
private void initSE(Context context) {
/**
* 這里是footer的填充,注意指定他的父親為當前的listview,
* 這里footer不用指定layoutparem是因為footer 在填充的時候已經(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出來的他默認的 layoutparm是當前header的類型,
* 如果我們不修改的話會報錯 類型轉(zhuǎn)化異常,
*/
mRefreshHeader.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT));
addHeaderView(mRefreshHeader);
}
if (loadingMoreEnabled) {
addFooterView(loadMoreView);
}
super.setAdapter(adapter);
}
源代碼下載地址:ElongGradleTaskDemo
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Android ExpandableListView雙層嵌套實現(xiàn)三級樹形菜單
- Android ExpandableListView單選以及多選實現(xiàn)代碼
- Android ScrollView嵌套ExpandableListView顯示不正常的問題的解決辦法
- Android listview ExpandableListView實現(xiàn)多選,單選,全選,edittext實現(xiàn)批量輸入的實例代碼
- Android 關于ExpandableListView刷新問題的解決方法
- Android 關于ExpandableListView去掉里頭分割線的方法
- Android UI控件ExpandableListView基本用法詳解
- Android改變ExpandableListView的indicator圖標實現(xiàn)方法
- Android中ExpandableListView的用法實例
- Android ExpandableListView展開列表控件使用實例
- Android ExpandableListView用法示例詳解
相關文章
Android自定義viewgroup 使用adapter適配數(shù)據(jù)(6)
這篇文章主要為大家詳細介紹了Android自定義viewgroup,使用adapter適配數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12
Android編程實現(xiàn)ViewPager多頁面滑動切換及動畫效果的方法
這篇文章主要介紹了Android編程實現(xiàn)ViewPager多頁面滑動切換及動畫效果的方法,以完整實例形式分析了ViewPager多頁面滑動切換效果的布局及功能實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11
Android DatePicker和DatePickerDialog基本用法示例
這篇文章主要介紹了Android DatePicker和DatePickerDialog基本用法,實例分析了DatePicker和DatePickerDialog控件針對手機時間設置的相關技巧,需要的朋友可以參考下2016-06-06

