国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android ExpandableListView實(shí)現(xiàn)下拉刷新和加載更多效果

2019-12-12 00:46:59
字體:
供稿:網(wǎng)友

支持下拉刷新和加載更多的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 + "-->");    }  };

簡單看下實(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

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 肃北| 邻水| 开江县| 壤塘县| 饶平县| 武夷山市| 滨海县| 哈尔滨市| 界首市| 潮安县| 固安县| 永兴县| 静乐县| 浦北县| 波密县| 云龙县| 大庆市| 黄骅市| 左云县| 历史| 祁东县| 安吉县| 乌拉特前旗| 浦城县| 东乡| 柘荣县| 贵溪市| 定远县| 建始县| 青铜峡市| 鄂州市| 留坝县| 乌兰县| 淳安县| 南部县| 全南县| 祁阳县| 荔波县| 张家口市| 扬州市| 瑞昌市|