Android开发中常犯的错误
来源:互联网 发布:mac 10.11usb2.0 编辑:程序博客网 时间:2024/04/19 16:22
背景
另一篇《Android开发中需要注意的坑》记录的是各种奇葩的坑,其中大多数的兼容性问题。而这一篇写的是开发中容易犯的一些代码编写错误。
ListView中的CheckBox
若在ListView的Item中有CheckBox,而这个时候在Adapter中我们又设置了各个Item中OnCheckedChangeListener
,那么在ListView滑动过程中,或则加载过程中会不断调用这个方法,正确的写法是:
holder.cbItem.setOnCheckedChangeListener(null); //设置为空if (mList.get(i).is_select()) { //设置其状态 holder.cbItem.setChecked(true);} else { holder.cbItem.setChecked(false);} //设置状态变化监听事件holder.cbItem.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { mItemContentClickListener.selectGoods(i, isChecked); }});
需要注意的setOnCheckedChangeListener方法
该方法不仅在我们点击的时候会调用,而且在调用setChecked
的时候也会被调用,正如其名字的意思,但是我们在开发中经常会忽略掉setChecked
会调用该方法的事情,导致系统出现Bug。
mSelectAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { showLog("setOnCheckedChangeListener"); }});
如果只是需要在点击的时候回调,那还是设置setOnClickListener
监听吧。
Adapter里数据引用改变导致数据不改变的问题
我们通过初始化Adapter设置mGoodList数据在ListView中显示:
GoodsListAdapter goodsListAdapter=new GoodsListAdapter(this,mGoodsList);mListView.setAdapter(goodsListAdapter);
当我们数据改变时,容易犯一下错误:
mGoodsList=mOtherList;goodsListAdapter.notifyDataSetChanged();
正确的应该是:
mGoodsList.clear();mGoodsList.addAll(mOtherList);goodsListAdapter.notifyDataSetChanged();
原因是在我们new GoodsListAdapter(...)
已将mGoodsList的引用传递给Adapter,如果mGoodsList=mOtherList
这种方法给mGoodsList赋值是不成功的,赋给mGoodsList的是新的引用,但Adapter却还保留原来的引用。
SQLite里存储INTEGER数据
在创建表时,将某一字段类型设置为INTEGER,如果存储00311104035001这样的数据,SQLite真正存储的值会变为311104035001。若要避免这种错误,可选择VARCHAR类型。
APP升级要留一条后路
即强制升级,因为开发中总会遇到这种需求;
浮点数或双精度计算时要考虑保留小数点后的位数
之前做计算时没有考虑这个,导致有些计算的结果是个无线循环小数,如:128.6999999…,以下是个方法:
public String getResult(double num){ BigDecimal input = new BigDecimal(num); double result = input.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); return String.valueOf(result);}
ListView设置setOnItemClickListener点击没反应
问题一般是由于ListView中的ItemView里有Button、Checkbox、ImageView等控件,导致点击ItemView时焦点其他控件拦截了,要解决此问题,只需要在控件上设置android:focusable=”false”。
- Android开发中常犯的错误
- Android开发中常犯的错误有哪些
- 敏捷开发中常犯的10大错误
- C#中常犯的是个错误
- 商务英语中常犯的5个错误
- 商务英语中常犯的5个错误
- 网站设计布局中常犯的错误
- 网站设计布局中常犯的错误
- 我编程中常犯的错误
- C语言中常犯的一个错误
- java中常犯的几个错误,自勉。
- SEO优化中常犯的错误
- 产品经理的漫长历程中常犯的错误
- Java基础中常犯的一些细节上的错误
- 转 43条网页设计中常犯的错误总结
- Java中常犯的错误,你知道吗?
- 误区:思维中常犯的6个基本错误
- 43条网页设计中常犯的错误总结
- 云上Hadoop之挑战
- Evaluate Reverse Polish Notation
- CImg Library's Examples Compiling and Linking
- netty学习及源码分析(一)
- 模糊控制原理
- Android开发中常犯的错误
- 类与类之间的关系
- Android拍照相册相关的图片获取与剪切工具类
- 随笔
- python2
- Maven系列(四)--pom.xml详解
- Linux系统下使用DD命令克隆磁盘或者镜像
- Multiple dex files define Landroid/support/v4/
- DevExpress(11.1.8) 报表(web):dev控件 打印报表(静态数据)