zoukankan      html  css  js  c++  java
  • android 在自定义的listview(有刷新加载项)列表中,数据过少时不能铺满整个屏幕时,header和footer同时显示问题

    android  在自定义的listview(有刷新加载项)列表中,数据过少时,当刷新时,加载项也会显示,这是很头疼的一个问题,查阅了一些资料,总结了一个比较不错的方法:

     原来代码:

     1  @Override
     2     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
     3     this.firstVisibleItem = firstVisibleItem;
     4     this.lastVisibleItem = firstVisibleItem + visibleItemCount;
     5     this.totalItemCount = totalItemCount;
     6     }
     7 
     8     @Override
     9     public void onScrollStateChanged(AbsListView view, int scrollState) {
    10     this.scrollState = scrollState;
    11     
    12     if (totalItemCount == lastVisibleItem&& scrollState == SCROLL_STATE_IDLE) {
    13         if (!isLoading) {
    14         isLoading = true;
    15         footer.findViewById(R.id.load_layout).setVisibility(View.VISIBLE);
    16         // 加载更多
    17         iLoadListener.onLoad();
    18         }
    19     }
    20 
    21     }

    通常大家通过这种方法来判断是否应该显示加载并访问网络数据等,但是当数据不足以布满全部时,下拉刷新后,(因满足条件)会同时触发加载事件,想要不触发加载事件,只有改变触发条件,一种思想是判断数据是否过少不能布满屏幕,但是这种思想太难用代码实现(小生刚刚学习android,经验不足),另一种思想是因为在刷新时不能显示加载布局,我们可以判断当前是否处于刷新状态来判断因不应该显示加载布局,而判断是否处于刷新状态我们可以利用header.getPaddingTop() == -headerHeight(headerHeight是hreader的高度)判断

    请看代码

     1   @Override
     2     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
     3     this.firstVisibleItem = firstVisibleItem;
     4     this.lastVisibleItem = firstVisibleItem + visibleItemCount;
     5     this.totalItemCount = totalItemCount;
     6     }
     7 
     8     @Override
     9     public void onScrollStateChanged(AbsListView view, int scrollState) {
    10     this.scrollState = scrollState;
    11     if (header.getPaddingTop() == -headerHeight) {
    12         flag = true;
    13     } else {
    14         flag = false;
    15     }
    16     if (totalItemCount == lastVisibleItem && flag && scrollState == SCROLL_STATE_IDLE) {
    17         if (!isLoading) {
    18         isLoading = true;
    19         footer.findViewById(R.id.load_layout).setVisibility(View.VISIBLE);
    20         // 加载更多
    21         iLoadListener.onLoad();
    22         }
    23     }
    24 
    25     }

    定义一个私有布尔变量flag,当header.getPaddingTop() == -headerHeight时,当前不在刷新状态,flag=true,满足显示加载布局的一个条件。

    当处于刷新状态时,flag=false,不满足加载条件,所以解决了同时出现两个布局的问题。

      当然,大神们会有更好的办法。。本菜鸟只能想到这么多了,谢谢。。。。。。

  • 相关阅读:
    存储过程使用收集
    网站伪静态技术(网页伪静态化)
    鼠标拖动层
    Oracle系统中用户权限的赋予,查看和管理(3)
    数据库中的锁查询及相关关系
    undo 管理
    grant 和 REVOKE权限
    Oracle系统中用户权限的赋予,查看和管理(2)
    了解数据库不同启动
    Oracle系统中用户权限的赋予,查看和管理(注意点)(4)
  • 原文地址:https://www.cnblogs.com/xiaotaoqi/p/5462267.html
Copyright © 2011-2022 走看看