Android开发随手记之一
2016-02-12 16:03
253 查看
最近接了两个外包,另外还负责WI输入法http://wi.hit.edu.cn的手写开发和一个Bug的解决,总结一些经验吧。
两个问题
1、当在『浏览状态下』,有个『更多』按钮,点击『更多』按钮,数据源改变,然后notifyDataSetChanged()进行刷新ListView,notifyDataSetChanged()是观察者模式。但此时如果已经切换到『编辑状态』的话,再点击『更多』,会报NullPointerException。因为在从『浏览状态』切换到『编辑状态』的时候,ListView已经重新装配了Apdater,此时去改变数据源再notifyDataSetChanged(),是不行的。为什么不行?后面会讲述。正确做法是当点击『更多』按钮,都重新装配一次,而不是notifyDataSetChanged();
2、自定义Dialog显示GridView,GridView的每一项Item都由图片和文字组合,点击GridView中的某一项Item,改变图片和文字,再dismiss dialog,重新唤出Dialog的时候,文字不改变,图片改变。如果不dismiss dialog,文字和图片都改变。这是什么鬼???
一些积累
1、一个购物车列表或其他的列表,可以用ListView来实现,当由『浏览状态』进入『编辑状态』的时候,可以这么干。『浏览状态』用一个xml文件,『编辑状态』用一个xml文件,这样实现会很简单,然后写一个Adapter的构造函数(参数中含有xml文件资源int值),每次切换,都重新new一遍Adapter,再setListAdapter。
2、padding内边距,margin外边距。GridView中android:stretchMode="columnWidth"列宽自动缩放。
3、虽然所有的页面都可以写入代码中,这样会使得管理空间非常灵活。但动态管理控件,Dom操作,消耗资源。所以还是将用代码关系界面和用XML管理界面相结合。
4、思路一定要清晰,第一步,第二步,第三步.....做一步检查一步。封装函数尽量要功能单一。
5、一个Android最佳实践开源项目https://github.com/tianzhijiexian/Android-Best-Practices
6、按钮xml格式一般定义
7、先设计数据库,再实体层,再数据访问接口层(dao),再实现层,业务逻辑层,再View层。分层,MVC。这些我会在详细写一篇博客的。
8、用Android Studio给我的程序用JUnit做单元测试
出了一个问题,targetPackage属性出现了cannot resolve symbol问题。但是在运行的时候,没有任何问题。暂时的一个可能原因是lint的一个问题,提示出错了,其实是没问题的。暂时还没有找到更合理的原因。
9、分页必须知道的信息
1.每页多少记录,决定前端每页显示多少条记录
2.取第几页,决定前端某个页面到底显示什么,select * from employee limit 1, 8
3.共有多少条记录,select count(*) from employee,为了计算总页数,为什么要计算总页数,为了判断是否已经到了最后一页
总页数 = 总记录数 % 每页记录数 == 0 ?总记录数 / 每页记录数 : 总记录数 / 每页记录数 + 1
两个问题
1、当在『浏览状态下』,有个『更多』按钮,点击『更多』按钮,数据源改变,然后notifyDataSetChanged()进行刷新ListView,notifyDataSetChanged()是观察者模式。但此时如果已经切换到『编辑状态』的话,再点击『更多』,会报NullPointerException。因为在从『浏览状态』切换到『编辑状态』的时候,ListView已经重新装配了Apdater,此时去改变数据源再notifyDataSetChanged(),是不行的。为什么不行?后面会讲述。正确做法是当点击『更多』按钮,都重新装配一次,而不是notifyDataSetChanged();
2、自定义Dialog显示GridView,GridView的每一项Item都由图片和文字组合,点击GridView中的某一项Item,改变图片和文字,再dismiss dialog,重新唤出Dialog的时候,文字不改变,图片改变。如果不dismiss dialog,文字和图片都改变。这是什么鬼???
一些积累
1、一个购物车列表或其他的列表,可以用ListView来实现,当由『浏览状态』进入『编辑状态』的时候,可以这么干。『浏览状态』用一个xml文件,『编辑状态』用一个xml文件,这样实现会很简单,然后写一个Adapter的构造函数(参数中含有xml文件资源int值),每次切换,都重新new一遍Adapter,再setListAdapter。
2、padding内边距,margin外边距。GridView中android:stretchMode="columnWidth"列宽自动缩放。
3、虽然所有的页面都可以写入代码中,这样会使得管理空间非常灵活。但动态管理控件,Dom操作,消耗资源。所以还是将用代码关系界面和用XML管理界面相结合。
4、思路一定要清晰,第一步,第二步,第三步.....做一步检查一步。封装函数尽量要功能单一。
5、一个Android最佳实践开源项目https://github.com/tianzhijiexian/Android-Best-Practices
6、按钮xml格式一般定义
7、先设计数据库,再实体层,再数据访问接口层(dao),再实现层,业务逻辑层,再View层。分层,MVC。这些我会在详细写一篇博客的。
8、用Android Studio给我的程序用JUnit做单元测试
<uses-library android:name="android.test.runner" /> // 要在<Application>结点中
<instrumentation // 这个在Application节点外 android:name="android.test.InstrumentationTestRunner" android:targetPackage="你的App包名" android:label="test for my app" />
出了一个问题,targetPackage属性出现了cannot resolve symbol问题。但是在运行的时候,没有任何问题。暂时的一个可能原因是lint的一个问题,提示出错了,其实是没问题的。暂时还没有找到更合理的原因。
9、分页必须知道的信息
1.每页多少记录,决定前端每页显示多少条记录
2.取第几页,决定前端某个页面到底显示什么,select * from employee limit 1, 8
3.共有多少条记录,select count(*) from employee,为了计算总页数,为什么要计算总页数,为了判断是否已经到了最后一页
总页数 = 总记录数 % 每页记录数 == 0 ?总记录数 / 每页记录数 : 总记录数 / 每页记录数 + 1
相关文章推荐
- ANDROID_MARS学习笔记_S02_001_Spinner
- 【案例分析】android广播接收不到原因分析
- android中view控件的setTag()和getTag()用法和功能介绍
- Android相机开发那些坑
- ANDROID_MARS学习笔记_S01_012_RatingBar
- ANDROID_MARS学习笔记_S01_012_SeekBar
- Android开发之Animations动画用法实例详解
- ANDROID_MARS学习笔记_S01_011ProgressBar
- 【Android】7.7 以后改为在Win10下开发了
- 多长时间更新一次 Android Studio?
- Android编程滑动效果之倒影效果实现方法(附demo源码下载)
- android:Activity数据传递之静态变量
- Android样式的开发:Layer-list篇
- ANDROID_MARS学习笔记_S01_010日期时间控件
- Android样式的开发:Shape篇
- Android编程滑动效果之Gallery+GridView实现图片预览功能(附demo源码下载)
- android:Activity数据传递之对象(parcelable)
- Android Checkbox详解
- 使用音频信息绘制动态波纹
- Android编程滑动效果之Gallery仿图像集浏览实现方法