android listview grid 滚动加载实例

来源:互联网 发布:sqlite linux 安装 编辑:程序博客网 时间:2024/06/08 18:16

/**adapter **/ 

SimpleAdapter

sa = new  SimpleAdapter(context, data, R.layout.grid_item_for_contact,

  new String[] { "photo", "employeesName" }, new int[] { R.id.iv_head, R.id.name }// ,//80
  );

 

// 滚动监听
  listview.setOnScrollListener(new OnScrollListener() {
   private int firstVisibleItem;
   private int visibleItemCount;
   private int totalItemCount;

   @Override
   public void onScrollStateChanged(AbsListView view, int scrollState) {
    // TODO Auto-generated method stub

    Log.v(TAG, "scrollState:"
      + scrollState
      + (scrollState == OnScrollListener.SCROLL_STATE_IDLE ? "OnScrollListener.SCROLL_STATE_IDLE"
        : scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL ? "OnScrollListener.SCROLL_STATE_TOUCH_SCROLL"
          : "OnScrollListener.SCROLL_STATE_IDLE"));
    if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {

     boolean needDownLoad = false; // 判断是否有数据需要刷新
     for (int i = 0; i < visibleItemCount; i++) {
      Map map = (Map) view.getItemAtPosition(i + firstVisibleItem);

      if (map == null || map.get(FIELD_DONG) == null || !Boolean.valueOf(map.get(FIELD_DONG).toString())) {
       needDownLoad = true;
       break;
      }
     }
     if (needDownLoad) {

      Log.v(TAG, "updateTask" + updateTask);
      if (updateTask != null && updateTask.getStatus() == AsyncTask.Status.RUNNING) {
       updateTask.cancel(true);
      }

      updateTask = new CreateContactGridViewTask("", firstVisibleItem, visibleItemCount);
      updateTask.execute(null);

     }
    }
   }

   @Override
   public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    // TODO Auto-generated method stub

    Log.v(TAG, "firstVisibleItem:" + firstVisibleItem + "visibleItemCount:" + visibleItemCount + "totalItemCount:"
      + totalItemCount);

   //记录最后此滚动位置
    this.firstVisibleItem = firstVisibleItem;
    this.visibleItemCount = visibleItemCount;
    this.totalItemCount = totalItemCount;

   }
  });

 

//加载任务

// 创建listview任务 线程
 private class CreateContactGridViewTask extends AsyncTask<Integer, Void, Map> {

  private final String name;
  private final int firstItem;
  private final int itemsCount;

  public CreateContactGridViewTask(String name, int firstItem, int itemsCount) {
   super();
   this.name = name;
   this.firstItem = firstItem;
   this.itemsCount = itemsCount;
  }

  public CreateContactGridViewTask() {
   name = "";
   firstItem = 0;
   itemsCount = StaticValues.DEFAULTROWS;//使用默认值

  }

  @Override
  protected void onPreExecute() {
   // 显示进度条
   if (context instanceof BaseActivity && firstItem == 0)
    ((BaseActivity) context).showProgress_panel();
  }

  @Override
  protected Map doInBackground(Integer... params) {
   // TODO Auto-generated method stub

   // 计算分页数据
   int pageIndex = firstItem / itemsCount + 1;

//查询远程

   Map result = NetWorkService.queryEmployeesInfoByKeyWords(name, pageIndex, itemsCount);

   return result;

  }

  @Override
  protected void onPostExecute(Map result) {

   if (context instanceof BaseActivity)
    ((BaseActivity) context).hideProgress_panel();
   // 停止刷新按钮
   hc.stopAnmiation();
   if (NetWorkResultHandler.handleError(context, ContactGridView.this, result)) {

    // ContactGridView.this.setLayoutAnimation(getLayoutAnimation().)

//获取加载到的数据

    List<Map<String, Object>> newData = NetWorkResultHandler.getDataFromResult(result);
    PageInfo pageInfo = NetWorkResultHandler.getPageInfoFromResult(result);
    if (sa.getCount() != pageInfo.getTotalRow()) {  //当总记录数步相同时
     data.removeAll(data);
     for (int i = 0; i < pageInfo.getTotalRow(); i++) {
      data.add(new HashMap());    //先填满整个数据源
     }

   }
    for (int j = 0; j < itemsCount; j++) {   //找出未加载的替换
     Map map = newData.get(j);
     map.put(FIELD_DONG, true);
     Map replaceData = (Map) data.get(firstItem + j);
     if (replaceData.get(replaceData) != null && Boolean.valueOf(replaceData.get(replaceData).toString())) {

     } else
          data.set(firstItem + j, map);
    }

     //
        sa.notifyDataSetChanged();
   }

  }
 }

 

/** 新手自学笔记     欢迎指点

 

原创粉丝点击