ListView的优化和使用
来源:互联网 发布:网络套餐对比 编辑:程序博客网 时间:2024/05/22 12:12
1.使用viewHolder提高ListView的效率
避免的每次去调用getView()方法的时候都要去findViewById()实例控件,利用ViewHolder可以提高50%的效率;`public final class ViewHolder{ public TextView tv; public ImageView iv; public EditText et;}`
2.ListView的使用
(1)ListView每个itme之间的分隔线,系统提供了divider和dividerHeight两个属性
divider:可以是一个颜色也可以是一个资源文件
dividerHeight:设置分隔线的高度
如果不想要分隔线就可以设置为android:divider=“@null”
(2)ListView隐藏滚动条:把scrollbars设置为none
(3)取消ListView的点击效果:listSelector:#00000000或者是用android系统自带的一个透明颜色listselector:android:color/transparent
(4)设置显示到ListView的第几个itme,默认是在第一个;listview.setSelection(n)(这是瞬间到达第n个itme);也可以通过下面的代码平滑的到达;
mListView.smoothScrollby(distance,duration);
mListView.smoothScrollbyOffset(offset);
mListView.smoothScrollToosition(index);
(5)动态的修改listView,通过修改List数据来改变listView,但是要保证是修改了同一个list数据,mAdapter.notifyDateSetChanged();
(6)listView的滑动和滚动
mListView.setOnTouchListener(new 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; } }); // 滑动Listview mListView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case OnScrollListener.SCROLL_STATE_FLING:// 手指抛动 break; case OnScrollListener.SCROLL_STATE_IDLE:// 停止滑动 break; case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 手指滚动 break; default: break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //滚动时会一直调用 } });
(7)具有弹性的listView
//MaxOverScrollY参数默认是0, 只需要把此参数修改为大于0的参数即可。int mMaxOverScrollY = 100;//重写overScrollBy方法 改变MaxOverScrollY参数@Overrideprotected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { // TODO Auto-generated method stub return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, mMaxOverScrollY, isTouchEvent);}private void initView(){//根据手机的分辨率动态的去修改这个参数的大小 DisplayMetrics metrics = mContext.getResources().getDisplayMetrics(); float density = metrics.density; mMaxOverScrollY = (int) (density * mMaxOverScrollY);}
(8)多种itme类型的Listview
//adapter中添加两个方法:@Override public int getViewTypeCount() { //返回item的种类数 return 2; }@Override public int getItemViewType(int position) { //返回itme的具体类型 return mDate.get(position).type; }//在getView方法中根据不同的type返回不同的convertView @Override public View getView(int position, View convertView, ViewGroup parent) { Holder holder = null; if (convertView == null) { if (getItemViewType(position) == 0) { holder = new Holder(); convertView = View.inflate(MainActivity.this, R.layout.main_item, null); holder.city = (TextView) convertView .findViewById(R.id.tv_item_city); holder.weather = (TextView) convertView .findViewById(R.id.tv_item_weather); } else { holder = new Holder(); convertView = View.inflate(MainActivity.this, R.layout.main_item_2, null); holder.city = (TextView) convertView .findViewById(R.id.tv_item_city_2); holder.weather = (TextView) convertView .findViewById(R.id.tv_item_weather_2); } convertView.setTag(holder); } else { holder = (Holder) convertView.getTag(); } Bean bean = mDate.get(position); holder.city.setText(bean.city); holder.weather.setText(bean.weather); return convertView; }
(9)动态的改变listView的布局,点击某个itme来达到一个Focus的效果
mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { System.out.println("点击了第"+position+"个条目"); mMainAdapter.setCurrentItem(position); mMainAdapter.notifyDataSetChanged(); } });clsee MyAdapter extends BaseAdapter{ private int mCurrentItem;//点击的条目 private boolean isFaist = false;//是否为第一次加载 //第几个条目被点击 public void setCurrentItem(int position) { mCurrentItem = position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //根据点击的条目的位置来分别返回不同的convertview if (mCurrentItem == position && isFaist) { return View1; }else{ isFaist = true; return View2; } }}
0 0
- ListView的使用和优化
- ListView的优化和使用
- ListVIew的使用和优化
- listView使用和优化
- ListView的简单使用和性能优化
- listview 常见的优化和使用技巧
- 再探ListView的使用和优化
- ListView 的优化使用
- ListView和RecyclerView的使用和性能优化总结
- listview的基本使用,listview的优化
- Android杂谈--ListView之BaseAdapter的使用和优化
- Android-ListView适配器BaseAdapter的使用和优化
- 【Android UI】ListView的使用和简单优化
- 安卓基础:ListView的简单使用和优化
- ListView 的优化及使用
- Android 使用Listview的优化
- ListView的使用及其优化
- ListView优化--ViewHolder的使用
- 【HBase-1.2.3】HBase1.2.3 的安装
- 视觉SLAM实战(一):RGBD SLAM V2
- html的meta总结,html标签中meta属性使用介绍
- 小程序WXML之引用
- iOS-第三方激活app,并且上传文件
- ListView的优化和使用
- 使用curl命令操作elasticsearch
- Linux fork()返回值说明
- TomCat类加载器结构
- CentOS 6.5 安装gmime 2.6.20 (一)
- 微软公司内部培训程序员资料---求解非线性方程组的类
- 高通工具QACT使用之MBDRC模块配置
- h5触摸事件:touchstart、touchmove和touchend
- C++ Primer(第五版)练习6.22