ListView使用技巧

()设置分隔线

ListView默认是有分隔线的,可以通过android:divider=”@null”设置分隔线透明,也可以通过 android:divider和android:dividerHeight来设置分隔线的颜色(图片)和分隔线的高度。

注:分隔线是指每个Item之间的线,ListView高度设置为match_parent时,最后一个Item的后面也有分隔线,ListView高度设置为wrap_content最后一个Item没有分隔线。

()设置滚动条

ListView在滚动时,默认在右边是有滚动条的。可以设置android:scrollbars=”none”来取消滚动条。

()设置item点击效果

点击ListView的Item时,默认会出现一个点击效果。可以设置android:listSelector来改变Item点击的颜色。

()处理空数据时ListView显示的布局

可以通过setEmptyView(View emptyView)设置ListView在空数据显示的布局。

注:setEmptyView加载的emptyView必须与ListView在同一个布局文件中,可以把ListView和emptyView写在FrameLayout中。

()弹性(阻尼)ListView

这个效果有很多种实现方式,下面的方式是非常简单的

只需重写overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)方法,修改maxOverScrollY参数值

参数maxOverScrollY注释:Number of pixels to overscroll by in either direction along the Y axis.

 @Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, 
int scrollRangeY, int maxOverScrollX, 
int maxOverScrollY, boolean isTouchEvent) {

    float density = mContext.getResources().
    getDisplayMetrics().density;
    int mMaxOverScrollY = (int) (density * 50);

     return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, 
     maxOverScrollX, mMaxOverScrollY, isTouchEvent);
}

()ListView加载多种不同Item

只需要重写下面二个方法
int getViewTypeCount():返回不同布局的总数.
int getItemViewType(int position):返回第position个Item是那种类型,返回值必须从0开始,不然就会报错

()ListView和ScrollView冲突
如果ScrollView中存在ListView,那么ListView数据不会展示完全,这时需要重写onMeasure()方法

  @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int expandSpec = View.MeasureSpec.
    makeMeasureSpec(Integer.MAX_VALUE >> 2,
            View.MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, expandSpec);

()触摸事件

setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    //向下时触发
                    break;

                case MotionEvent.ACTION_MOVE:
                    //移动触发
                    break;

                case MotionEvent.ACTION_UP:
                    //向上触摸
                    break;
            }

            return false;
        }
    });

这个方法只要触摸就一直被调用

()滚动事件

setOnScrollListener(new AbsListView.OnScrollListener(){ 
  @Override
  public void onScrollStateChanged(AbsListView view, int scrollState) {

   switch (scrollState) {
       case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
            //滚动停止
            break;
       case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
            //正在滚动
            break;
       case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
            //手指用力滑动,离开ListView后,由于惯性继续滚动
            break;
         }
  }

   @Override
   public void onScroll(AbsListView view, int firstVisibleItem, 
   int visibleItemCount, int totalItemCount){ 

        if (firstVisibleItem + visibleItemCount >= totalItemCount){
               //滚动到最后一页"                       
        }

        if (lastVisibleItem > firstVisibleItem) {
                //往下滑动                            
        } else if (lastVisibleItem <firstVisibleItem){ 
                 //往上滑动                  
        }

            lastVisibleItem = firstVisibleItem;
        }
    });

onScrollStateChanged()方法:如果没有惯性滚动,会调用两次.如果存在惯性滚动,会调用三次

onScroll()方法:ListView滚动时会一直回调
firstVisibleItem参数:当前能看到的第一个Item(从0开始)
visibleItemCount参数:当前能看到的Item的总数
totalItemCount参数:整个ListView的Item总数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值