第四章:ListView使用技巧

2018-08-16  本文已影响0人  夜瑾漠

《Android群英传》个人读书笔记

4.1 ListView常用优化技巧

4.1.1 使用ViewHolder模式提高效率

4.1.2 设置项目间分割线

4.1.3 隐藏ListView滚动条

4.1.4 取消ListView的Item点击效果

4.1.5 设置ListView需要显示在第几项

      mListView.smoothScrollBy(distance, duration);
      mListView.smoothScrollByOffset(offset);
      mListView.smoothScrollToPosition(index);

4.1.6 动态修改ListView

      mData.add("New");
      mAdapter.notifyDataSetChanged();

4.1.7 遍历ListView中的所有Item

      for(int i = 0; i < mListView.getChildCount(); i++)
      {
      View view = mListView.getChildAt(i);
      }

4.1.8 处理空ListView

      listView listview = (ListView)findViewById(R.id.listView);
      listview.setEmptyView(findViewById(R.id.empty_view));

4.1.9 ListView滑动监听

4.1.9.1 OnTouchListener

      mListView.setOnTouchListener(new View.OnTouchListener(){
        @Override
        public boolean onTouch(View view, MotionEvent event)
          {
            swich(event.getAction())
          {
            case MotionEvent.ACTION_DOWN:
              // 触摸时操作
              break;
            case MotionEvent.ACTION_MOVE:
              // 滑动时操作
              break;
            case MotionEvent.ACTION_UP:
              // 抬起时操作
              break;
            default:
              break;
          }
          return false;
        }
      })

4.1.9.2 OnScrollListener

      mListView.setOnScrollListener(new OnScrollListener(){
        @Override
            public void onScrollStateChanged(AbsListView view, int scrollState){
            switch (scrollState){
                case OnScrollListener.SCROLL_STATE_IDLE:
                    // 滑动时停止
                    log.d("Test", "SCROLL_STATE_IDLE");
                    break;
                case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                    // 正在滚动
                    log.d("Test", "SCROLL_STATE_TOUCH_SCROLL");
                    break;
                case OnScrollListener.SCROLL_STATE_FLING:
                    // 手指用力滑动,在离开后由于惯性,listview继续滑动
                    log.d("Test", "SCROLL_STATE_FLING");
                    break;
            }
        }
    })

    @Override
    public void onScroll(AbsListView view, 
          int firstVisibleItem, 
          int visibleItemCount, 
          int totalItemCount)
    {
      // 滚动时一直调用
      Log.d("Test", "onScroll");
    }
      if(firstVisibleItem + visibleItemCount == totalItemCount
      && totalItem - Count > 0)
      {
          //滚动到最后一行
      }
      if(firstVisibleItem > lastVisibleItemPosition)
      {
          // 上滑
      }
      else if(firstVisibleItem < lastVisibleItemPosition)
      {
          // 下滑
      }
      lastVisibleItemPosition = firstVisibleItem;
      // 获取可视区域内最后一个Item的id
      mListView.getLastVisiblePosition();
      // 获取可视区域内第一个Item的id
      mListView.getFirstVisiblePosition();

4.2 ListView 常用拓展

4.2.1 具有弹性的ListView

      @Override
      protected boolean overScrollBy(int deltaX, int deltaY,
            int scrollX, int scrollY,
            int scrollRangeX, int scrollRangeY,
            int maxOverScrollX, int maxOverScrollY,
            boolean isTouchEvent)
            {
              return super.overScrollBy(deltaX, deltaY,
                  scrollX, scrollY,
                  scrollRangeX, scrollRangeY,
                  maxOverScrollX, mMaxOverDistance,
                  isTouchEvent);
            }
      private void initView()
      {
        DisplayMetrics metrics = mContext.getResopurces().getDisplayMetrics();
        float density = metrics.density;
        mMaxOverDistance = (int)(density * mMaxOverDistance);
      }

4.4.2 自动显示、隐藏布局的ListView

上一篇 下一篇

猜你喜欢

热点阅读