ListView使用技巧

对于Android开发,相信ListView这个控件大家一定不会陌生,它的重要性不言而喻,它的功能纷繁复杂,在项目中的表现形式灵活多变,要想得心应手的使用不并容易,今天带领大家一起领略ListView的风采.

1.使用ViewHolder

 @Override    public View getView(int i, View view, ViewGroup viewGroup) {        ViewHolder holder;        if(view==null){            holder=new ViewHolder();            view=mInflater.inflate(R.layout.viewholdernotifyadapter,null);            holder.img= (ImageView) view.findViewById(R.id.imageView);            holder.title= (TextView) view.findViewById(R.id.textView);            view.setTag(holder);        }else{            holder= (ViewHolder) view.getTag();        }        holder.img.setImageResource(R.mipmap.ic_launcher);        holder.title.setText(mData.get(i));        return view;    }    public final class ViewHolder{        private ImageView img;        private TextView title;    }

2.设置项目间分隔线

android:divider="@android:color/darker_gray"//设置分割线android:dividerHeight="10dp"//设置分隔线高度android:divider="@null"//隐藏分割线

3.隐藏ListView的滚动条

android:scrollbars="none"//隐藏ListView滚动条

4.取消ListView的Item点击效果

android:listSelector="@android:color/transparent"//取消ListView的Item点击效果

5.设置ListView需要显示在第几项

listView.setSelection(N);//默认显示在第N个Item,(N为第N个Item)(瞬时完成)//平滑移动mListView.smoothScrollBy(distance,duration);mListView.smoothScrollByOffset(offset);mListView.smoothScrollToPosition(index);

6.动态修改ListView

使用adapter.notifyDataSetChanged();通知ListView更改数据源对ListView动态修改,必须保证传入Adapter的数据List是同一个List而不能是其他对象,否则无法实现该效果

 public void btnAddItem(View view){        mData.add("哈哈哈");        adapter.notifyDataSetChanged();//通知Adapter更新数据        listView.setSelection(mData.size()-1);    }

7.遍历ListView中的所有Item

通过getChildAt()来获取第i个子View.

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

8.处理空ListView

通过setEmptyView(),在LiseView无数据的情况下显示默认的提示

 <FrameLayout        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1">        <ListView            android:id="@+id/listView"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:divider="@android:color/darker_gray"            android:dividerHeight="10dp"            android:listSelector="@android:color/transparent"            android:scrollbars="none">ListView>        <ImageView            android:id="@+id/empty_view"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:src="@mipmap/ic_launcher" />    FrameLayout>
ListView listView = (ListView) findViewById(R.id.listView);listView.setEmptyView(findViewById(R.id.empty_view));

9.ListView滑动监听

监听ListView滑动事件的方法主要有两种:一个是通过OnTouchListener来实现监听,另一个是使用OnScrollListener来实现监听,通常还需要使用GestureDetector手势识别,VelocityTracker滑动速度检测来实现更好监听.

9.1 OnTouchListener

OnTouchListener是View中的监听事件,通过监听 ACTION_DOWN ACTION_MOVE ACTION_UP 这三个事件发生时的坐标,判断用户滑动的方向,在不同的事件中进行相应的逻辑处理.

 mListView.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View view, MotionEvent motionEvent) {                switch (motionEvent.getAction()) {                    case MotionEvent.ACTION_DOWN:                        //触摸时操作                        break;                    case MotionEvent.ACTION_MOVE:                        //移动时操作                        break;                    case MotionEvent.ACTION_UP:                        //离开时操作                        break;                }                return false;            }        });

9.2 OnScrollListener

OnScrollListener是AbsListView中的监听事件

   mListView.setOnScrollListener(new AbsListView.OnScrollListener() {            @Override            public void onScrollStateChanged(AbsListView absListView, int scrollState) {                switch (scrollState) {                    case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:                        //滑动停止时                        Log.d("tag", "SCROLL_STATE_IDLE");                        break;                    case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:                        //正在滚动                        Log.d("tag", "SCROLL_STATE_TOUCH_SCROLL");                        break;                    case AbsListView.OnScrollListener.SCROLL_STATE_FLING:                        //手指抛动时  即手指用力滑动  在离开后ListView由于惯性继续滑动                        Log.d("tag", "SCROLL_STATE_FLING");                        break;                }            }            @Override            public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {                //滚动时一直调用                Log.d("tag", "onScroll");            }        });

OnScrollListener中有两个回调方法–onScrollStateChanged()和onScroll().
onScrollStateChanged()根据它的参数scrollState来决定其回调的次数,scrollState有以下三种模式:

OnScrollListener.SCROLL_STATE_IDLE:滚动停止时.

OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:正在滚动时.

OnScrollListener.SCROLL_STATE_FLING:手指抛动时,即手指用力滑动,在离开后ListView由于惯性继续滑动的状态.

没有抛动状态时,回调2次,否则回调3次.
onScroll()在ListView滚动时一直回调,它有3个参数可以非常精确地显示当前ListView的滚动状态,

firstVisibleItem:当前能看见的第一个Item的ID(从0开始).

visibleItemCount:当前能看见的Item总数.

totalItemCount:整个ListView的Item总数.

当前能看见的Item数,包括没有显示完整的Item,即显示一小半的Item也包括在内.

//判断是否滚动到最后一行//当前可视的另一个Item的ID加上当前可视Item的和等于Item总数的时候,即滚动到了最后一行.if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0) {                    //滚动到最后一行    }
//判断滚动的方向//通过一个成员变量lastVisibleItemPosition来记录上次第一个可视的Item的ID并与当前的可视Item的ID进行比较,即可知道当前滚动的方向if (firstVisibleItem > lastVisibleItemPosition) {                    //上滑     } else if (firstVisibleItem < lastVisibleItemPosition) {                    //下滑    }lastVisibleItemPosition = firstVisibleItem;
//获取可视区域内最后一个Item的idmListView.getLastVisiblePosition();//获取可视区域内第一个Item的idmListVIew.geFirstVisiblePosition();

ListView例子下载链接

未完待续…

更多相关文章

  1. 手势滑动销毁Activity
  2. android scrollview嵌套scrollview,gridview,listview的方法和深
  3. Android(安卓)NestedScrollView嵌套RecyclerView冲突
  4. Android(安卓)滚动字幕实现
  5. Android初级教程_用ExpandableListView实现类似QQ好友列表
  6. android -------- RecyclerView的可(多个Item水平,垂直)滚动列表的
  7. Android双向滑动控件
  8. android的WebView、WebViewClient、WebChromeClient的关系
  9. android marquee textview 走马灯效果

随机推荐

  1. 解决 Android 中使用ListView和CheckBox
  2. [Mugeda HTML5技术教程之18]如何在Androi
  3. [开源c-FFMpeg]Android add prebuilt lib
  4. Android 成用户隐私安全问题严重
  5. Android(安卓)7.1.2(Android(安卓)N) Sys
  6. UiAutomator通过ant实现快速调试
  7. Android(安卓)使用OpenGLES 的粒子系统
  8. Android 实现通话监听
  9. MAC 配置android adb命令的环境变量
  10. Android & IOS & Chrome & Firefox OS哪