Android ListView 使用相关技巧
2016-04-20 18:23
597 查看
1.使用ViewHolder来提高效率:避免每次调用getView()的时候通过findViewById()实例化控件(在自定义的Adapter中定义一个内部类ViewHolder)
2.设置item的间隔:系统提供了
3.隐藏listview滚动条
4.item点击效果
5.显示在第N个item
6.处理空的listView(即当listview相关的Data集合或数组没有数据时,也是Adapter中的getCount()返回0时)
7.滑动监听
7.1通过onTouchListener
8.弹性的listview:(修改一个参数即可)
自定义listview并重写 overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)方法
为了能满足多分辨率
9.分类型的listview(例如:QQ微信,聊天布局的实现)
![](https://img-blog.csdn.net/20160420181919050)
其实就主要用两个方法在自定义的Adapter中
2.设置item的间隔:系统提供了
android:divider="@android:color/darker_gray" android:dividerHeight="10dp"
提示:不仅仅设置颜色,还可以设置图片哦,当设置为这样时没有间隔线
android:divider="@null"
3.隐藏listview滚动条
android:scrollbars="none"
4.item点击效果
android:listSelector="@android:color/transparent"
5.显示在第N个item
listView.setSelection(n);
6.处理空的listView(即当listview相关的Data集合或数组没有数据时,也是Adapter中的getCount()返回0时)
listView.setEmptyView(findViewById(R.id.textView));
7.滑动监听
7.1通过onTouchListener
listView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: mFirstY = motionEvent.getY(); break; case MotionEvent.ACTION_MOVE: mCurrentY = motionEvent.getY(); if(mCurrentY - mFirstY > mTouchSlop){ //down }else if(mFirstY - mCurrentY > mTouchSlop){ //up } break; } return false; } });
提示:mTouchSlop是定义的系统认为最低的滑动距离
mTouchSlop = ViewConfiguration.get(this).getScaledPagingTouchSlop();
7.2通过OnScrollListener
listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { } @Override public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if(firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount >0){ Log.e("TAG", "到最后一行"); } if(firstVisibleItem > lastVisibleItemPosition){ Log.e("TAG", "向上滑动");//show }else if(firstVisibleItem < lastVisibleItemPosition){ Log.e("TAG", "向下滑动");//hide; } lastVisibleItemPosition = firstVisibleItem;//lastVisibleItemPosition是成员变量(用于记录) } });
8.弹性的listview:(修改一个参数即可)
自定义listview并重写 overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)方法
@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, elasticDistance, isTouchEvent); }
提示:修改的就是其中的maxOverScrollY --> elasticDistance参数,
为了能满足多分辨率
private void init(Context context) { DisplayMetrics metrics = context.getResources().getDisplayMetrics(); float density = metrics.density; elasticDistance = (int)(elasticDistance * density);//elasticDistance = 500(可自定义数值) }
tip:不要忘记在自定义的listview的构造器中调用init(Context context)哦
9.分类型的listview(例如:QQ微信,聊天布局的实现)
其实就主要用两个方法在自定义的Adapter中
@Override public int getItemViewType(int position) { int x =0; if(position%2 == 0){ x = 0; }else{ x =1; } return x; } @Override public int getViewTypeCount() { return 2; } @Override public View getView(int i, View view, ViewGroup viewGroup) { if(getItemViewType(i) == 1){ view = LayoutInflater.from(Main2Activity.this).inflate(R.layout.in,null); }else{ view = LayoutInflater.from(Main2Activity.this).inflate(R.layout.out,null); } return view; }
tip:getItemViewType()用来返回第position个item是什么类型 getViewTypeCount()用来返回类型的总数
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories