感谢提供勘误信息的读者,正是有了你们,《Android进阶之光》才会变得越来越好。
注:小括号中的3印代表第3次印刷会修改的内容,依此类推。没有标注的就是首印和第2次印刷需要修改的内容。
目前最新版次:2018年10月 第8印。
第一章
- 5页,第3、4行,RecyclerView布局添加了无效的属性,去掉第3、4行。
android:divider="#FFB900" |
- 8页,第15、16行,RecyclerView没有被应用到,去掉第15、16行。
android.support.v7.widget.RecyclerView v=new android.support. |
- 8页(4印),倒数8行,mDivider.getIntrinsicHeight() 改为:mDivider.getIntrinsicWidth() 。
- 9页,第10行,“getItemOffsets方法则用于设置item分割线的size。”改为:getItemOffsets方法则用于设置item的padding属性。
- 10页 (5印)中间的段落会效率太低,应该把监听事件注册放入onCreateViewHolder方法中,改为如下代码:
|
- 26页,倒数11行,去掉app:actionProviderClass=”android.support.v7.widget.ShareActionProvider”。
第二章
- 55页(7印),第8行,这个View类型的参数是Snackbar的父控件,所以选择合适的父控件以确保Snackbar能显示在正确的位置上,改为:它可以是当前界面的任意一个View,Snackbar会使用这个View来查找用于展示Snackbar的最外层布局。
- 78页,第4行,mageView 改为: ImageView。
第三章
- 118页,第9行,result=super.onTouchEvent(ev) 改为: result=onTouchEvent(ev)。
- 121页(4印),标题 ViewRootImpl的PerformTraveals方法 改为:ViewRootImpl的PerformTraversals方法
- 143页(3印),倒数第6行;147页倒数第8行,改为:
canvas.drawRect(0 + paddingLeft, 0 + paddingTop, width + paddingLeft, height + paddingTop, mPaint); |
- 148页~179页(7印),148页最后一行,179页第一行,因为我们的组合控件整体布局是RelativeLayout,所以组合控件要继承RelativeLayout改为:这里的组合控件继承了RelativeLayout
第四章
- 152页,第7行LineraLayout改为:LinearLayout。
- 166页(3印),倒数第2行,“如果使用单个进程”改为:“如果使用单个线程”。倒数第5行,“把这个耗时的线程分配到一个单独的线程中去执行”改为:“把这个耗时的操作分配到一个单独的线程中去执行”。
- 167页(3印),图 4-3 Object.join改为:Thread.join。
- 170页(5印),倒数第二行,Thread.currentThread.interruupted(); 改为:Thread.currentThread.interrupt();
- 182页(5印),倒数第5行, this改为:Singleton.class
- 184页(7印),去掉7,8行,没有pull(time)。
- 194页(7印),第12行,”采用了无界的阻塞队列LinkedBlockingQueue”有歧义,应该改为:采用了无界阻塞队列LinkedBlockingQueue(容量默认为Integer.MAX_VALUE)。
第五章
222页(3印),倒数第4行,ImageLoader.ImageListener listener = ImageLoader.getImageListener改为:
ImageLoader.ImageListener listener = ImageLoader.getImageListener(iv_image, R.drawable.ico_default, R.drawable.ico_default);
223页(6印),第10行,android:id=”@+id/iv_image”;改为:android:id=”@+id/nv_image”
第18行,iv_image = (ImageView) this.findViewById(R.id.iv_image) 改为: nv_image = (NetworkImageView) this.findViewById(R.id.nv_image);231页(6印),图5-12 最后一行,缓存调度线程从网络队列取出请求改为: 网络调度线程从网络队列取出请求。
238页,第6行,private static OkHttpEngine mInstance;改为:private static volatile OkHttpEngine singleton;
(3印)第2行, public abstract void onResponse(Response response) throws IOException;改为:public abstract void onResponse(String str) throws IOException;239页(3印)第12行 onResponse方法和sendSuccessCallback方法改为如下:
public void onResponse(Call call, Response response) throws IOException {
sendSuccessCallback(response.body().string(), callback);
}
private void sendSuccessCallback(final String str, final ResultCallback callback) {
mHandler.post(new Runnable() {
public void run() {
if (callback != null) {
try {
callback.onResponse(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
}240页(3印),onResponse方法改为:
public void onResponse(String str) throws IOException{
Log.d(TAG, str);
Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();
}254页,第11行,“返回值大于0则是空闲连接,否则就是活跃连接。”改为:“返回值大于0则是活跃连接,否则就是空闲连接。”
第六章
- 275页(3印),倒数第5行,倒数第16行,singleton改为:instance。倒数第2行,getSingleton方法 改为:getInstance方法。
第八章
- 339页,倒数第6行,“第二个参数为終值,左闭右开。” 改为:“第二个参数为整数序列的个数。”
- 343页,(5印)倒数第15行,goupBy改为:groupBy。
- 351页,(5印)倒数第5行,最新数的数据是6 改为:最新的数据是3
第九章
- 388页,最后1行,去掉最后的“;”
- 402页:第7行,“接下来我们回到precess方法,我们从上面也知道了第400页注释1处的findAndParseTargets方法主要用于查找和解析注解。” 这句话表达不清楚,改为:“接下来回到第400页的process方法,我们已经知道了注释1处的findAndParseTargets方法主要用于查找和解析注解 。”
第十章
- 423页(4印),第6行,MVVP改为:MVVM。
- 442页(5印),倒数第12行,type=”Swordsman” 改为:type=”man”
- 466页、467页,多处Source Insights改为:Source Insight。