京东Android一面答错的知识

来源:互联网 发布:java 没错溢出 编辑:程序博客网 时间:2024/05/23 15:06

getItemViewType();

在ListView的Adapter里重写这个方法,可以得到不同的布局,此方法的返回值类型是int,面试官询问它的返回,回答了任意int值都可以。

后来自己测试,如果在不重写getViewTypeCount方法时,确实是任意值都可以执行的,但是inflate出来的View却是混乱的。

在添加了getViewTypeCount方法之后,如果是任意int值,在ListView向下滑动,下方的item要读取上方销毁的convertView进行复用时,会直接崩溃。

合理使用方法: 比如有三种样式的布局,重写getViewTypeCount方法,返回3 , 获取itemViewType的时候,返回值在 0~2之间。这样才可以正常执行。

SQL Lite更新

在更改版本号时进行版本更新更新时,可以直接更改的部分是:
更改表名,增加一个列。
但是不可以进行删除列的操作,如果需要删除列,就需要整个表的数据迁移:

db.beginTransaction();      //开启shi'wu        try {               //建立临时表存数据            db.execSQL("CREATE TEMPORARY TABLE pe_backup (a, b);");              db.execSQL("INSERT INTO pe_backup SELECT a, b FROM pedant;");              db.execSQL("DROP TABLE pedant;");              db.execSQL("CREATE TABLE pedant(a text, b text);");              db.execSQL("INSERT INTO pedant SELECT a, b FROM pe_backup;");              db.execSQL("DROP TABLE pe_backup;");              db.setTransactionSuccessful();          } finally {              db.endTransaction();     //提交事务          }  

在进行数据库越级更新的时候,更新的函数里有三个参数,数据库,老的版本号,新的版本号,如果越级升级,不能正常改变数据库的结构,正确做法是:
定义一个局部变量储存旧的版本号,然后对升级过的每一个版本号都进行判断,若局部变量的版本号和升级后的某个版本号相同,则更改一次表结构,将变量设为更新后的版本号,再进行下一次判断。

EventBus重复注册

使用EventBus.getDefault().isRegistered(this)
可以判断当前Activity是否注册了EventBus。

原创粉丝点击