我在Android开发中遇到的问题
2016-11-15 21:54
134 查看
前段时间开始实习了,在工作中遇到了很多问题,因为没有老司机带路,
基本上到处踩坑,遇到了很多问题,有时间的话再在这里更新。
1.ListView的ViewHolder导致的数据混乱(其实是自己垃圾 = =)
问题描述:
ListView的Item有关注、点赞按钮。在获取数据初始化后,滑动ListView将Item移出屏幕,再返回之前被移出的关注、点赞按钮状态都一致变为了已关注与已点赞。
问题原因:
ListView的Adapter中使用ViewHolder使得View模板复用
ListView滑动会调用getView方法,对应赋值
关注与点赞按钮只写了已关注或已点赞的逻辑判断,没有反面情况的赋值处理
解决办法:补上发面情况的赋值处理
综上所述:导致了状态不能复位以致数据错乱。
2.事件拦截或处理返回导致的点击无效或不能触发问题
问题描述:
RelativeLayout设置点击事件无效,断点调试发现没有触发OnClick事件
问题原因:
RelativeLayout中的Item包含有获取焦点控件,例如:Button
没有将事件处理返回给RelativeLayout
解决方法:将Button的clickable设为false
Tips:遇到控件点击无反应,试着向事件拦截与处理返回方面想一想,有时候会有特别的收获。在开发过程中好像发现AbsListView的子类的事件处理方法好像都默认返回true,不会将事件处理丢给父类,这也导致过类似的问题。
3.RecyclerView的刷新问题
问题描述:
在项目中使用了RecyclerView然后调用了notiftDataSetChange()方法,然后发现数据没有更新。
问题原因:
我的RecyclerView是ListView的Item中的一部分,所以在这个时候,单独刷新RecyclerView是没用的,刷新完之后调用ListView的notiftDataSetChange()问题得到解决。
常规原因:Adapter中的数据源与实际更新的数据源引用的不是同一个数据。建议可以在Adapter中写一个update方法,在update方法中data.clear中的数据源,然后data.addAll(datas)。(data为Adapter中的数据源,datas为传递进来的数据)。
2016年11月15日21:53:01更新
4.在Receiver中startActivity报错
原因:在谷歌的 Android API Guides 中,特意提醒开发者不要在后台启动 activity,包括在 Service 和 BroadcastReceiver 中,这样的设计是为了避免在用户毫不知情的情况下突然中断用户正在进行的工作。百度上好像说Activity中重写了startActivity,其他的没有….
解决方法:给Intent设置setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
5.Activity之间传递Bitmap
6.EditText点击,弹出的软键盘覆盖EditText下方小部分布局
2016年11月17日
基本上到处踩坑,遇到了很多问题,有时间的话再在这里更新。
1.ListView的ViewHolder导致的数据混乱(其实是自己垃圾 = =)
问题描述:
ListView的Item有关注、点赞按钮。在获取数据初始化后,滑动ListView将Item移出屏幕,再返回之前被移出的关注、点赞按钮状态都一致变为了已关注与已点赞。
问题原因:
ListView的Adapter中使用ViewHolder使得View模板复用
ListView滑动会调用getView方法,对应赋值
关注与点赞按钮只写了已关注或已点赞的逻辑判断,没有反面情况的赋值处理
解决办法:补上发面情况的赋值处理
综上所述:导致了状态不能复位以致数据错乱。
2.事件拦截或处理返回导致的点击无效或不能触发问题
问题描述:
RelativeLayout设置点击事件无效,断点调试发现没有触发OnClick事件
问题原因:
RelativeLayout中的Item包含有获取焦点控件,例如:Button
没有将事件处理返回给RelativeLayout
解决方法:将Button的clickable设为false
Tips:遇到控件点击无反应,试着向事件拦截与处理返回方面想一想,有时候会有特别的收获。在开发过程中好像发现AbsListView的子类的事件处理方法好像都默认返回true,不会将事件处理丢给父类,这也导致过类似的问题。
3.RecyclerView的刷新问题
问题描述:
在项目中使用了RecyclerView然后调用了notiftDataSetChange()方法,然后发现数据没有更新。
问题原因:
我的RecyclerView是ListView的Item中的一部分,所以在这个时候,单独刷新RecyclerView是没用的,刷新完之后调用ListView的notiftDataSetChange()问题得到解决。
常规原因:Adapter中的数据源与实际更新的数据源引用的不是同一个数据。建议可以在Adapter中写一个update方法,在update方法中data.clear中的数据源,然后data.addAll(datas)。(data为Adapter中的数据源,datas为传递进来的数据)。
2016年11月15日21:53:01更新
4.在Receiver中startActivity报错
原因:在谷歌的 Android API Guides 中,特意提醒开发者不要在后台启动 activity,包括在 Service 和 BroadcastReceiver 中,这样的设计是为了避免在用户毫不知情的情况下突然中断用户正在进行的工作。百度上好像说Activity中重写了startActivity,其他的没有….
解决方法:给Intent设置setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
5.Activity之间传递Bitmap
6.EditText点击,弹出的软键盘覆盖EditText下方小部分布局
2016年11月17日
相关文章推荐
- [原]用Eclipse开发Android应用,用svn管理源码时遇到的问题及解决方法
- Windows7部署Android开发环境傻瓜式教程(遇到的一些问题)
- ANDROID游戏开发——我在写飞机类游戏时遇到的一些问题与思考
- 在Android应用开发中遇到问题怎么办?
- 关于android开发遇到的一些问题的解决办法---间断的更新
- android开发搭建环境时遇到问题
- android开发——记下今天处理KeyDown和Menu事件所遇到的问题
- Android综合下载系统的开发步骤以及遇到问题
- android 2.3.4 在平板上开发遇到的问题
- 开发Android的时候遇到的问题及解决方法(不断更新)
- android开发环境搭建遇到的问题(MyEclipse8.5+android sdk2.3+ADT-8.0.1
- Android 开发遇到的一些问题整理
- android开发中遇到的2个路径问题和html解析问题
- 自己在使用Android Maps API 开发地图应用程序时遇到的问题,以及解决的办法
- Android开发中遇到读取数据库中的短信问题
- android开发过程遇到的问题和解决方案(不断更新)
- 用Eclipse开发Android时遇到的一个小问题
- Eclipse 开发Android小程序遇到的问题总结
- Unity3D——android开发中遇到的问题
- Android开发平台搭建遇到的ADT无法安装问题