————————————————-
■本書第2刷以前の内容に下記のような誤りがありました。お詫びの上、訂正いたします。
●202ページ 本文下から5行目
(誤)「content://com.example.android.sample.mymemoapp.memo/files」には「2」を、
(正)「content://com.example.android.sample.mymemoapp.memo/files」には「1」を、
●202ページ 本文下から4行目
(誤)「content://com.example.android.sample.mymemoapp.memo/files/1」には「1」を
(正)「content://com.example.android.sample.mymemoapp.memo/files/1」には「2」を
————————————————-
■本書第1刷の内容に下記のような誤りがありました。お詫びの上、訂正いたします。
●63ページ 本文下から4行目
(誤)drowableとminmap
(正)drawableとmipmap
●123ページ ページ下のコード「「dimens.xml」に定義されている文字サイズを指定したレイアウトファイル例」の下から3行目
(誤)android:textSize=”@dimens/primary_text_size”
(正)android:textSize=”@dimen/primary_text_size”
●171ページ ページ下のコードの「省略」の下2行目から7行目
(誤)
private static final String KEY_TEXT_SIZE = “text.size”;
public static final String TEXT_SIZE_LARGE = “text.size.large”;
public static final String TEXT_SIZE_MEDIUM = “text.size.medium”;
public static final String TEXT_SIZE_SMALL = “text.size.small”;
private static final String KEY_TEXT_STYLE = “text.style”;
public static final String TEXT_STYLE_BOLD = “text.style.bold”;
public static final String TEXT_STYLE_ITALIC = “text.style.italic”;
(正)
private static final String KEY_TEXT_SIZE = “text.size”;
public static final String TEXT_SIZE_LARGE = “large”;
public static final String TEXT_SIZE_MEDIUM = “medium”;
public static final String TEXT_SIZE_SMALL = “small”;
private static final String KEY_TEXT_STYLE = “text.style”;
public static final String TEXT_STYLE_BOLD = “bold”;
public static final String TEXT_STYLE_ITALIC = “italic”;
●180ページの本文1行目から6行目を入れ替え
(誤)1行目から6行目削除
(正)それでは、ドキュメントファイルを保存する実装例を見てみましょう。なお、実際にメモ帳アプリでドキュメントを保存するクラスは、213ページから解説する「MemoRespository」クラスで行っています。
●180ページの「コード メモ帳アプリでドキュメントファイルを保存するクラス(「MemoRespository.Java」)」のコードタイトルを変更
(正)ドキュメントファイルを保存する実装例
●180ページの「コード メモ帳アプリでドキュメントファイルを保存するクラス(「MemoRespository.Java」)」のコードの1行目
(誤)public class MemoRepository {
(正)public class MemoSaver {
●188ページのページ下のコードの3行目
(誤)SQLiteDatabase database = helper.getReadableDatabase();
(正)SQLiteDatabase database = helper.getWritableDatabase();
●197ページの「コード 「strings.xml」に追加する項目」」のコードを以下に訂正
<string name=”permission_memo_read_label”>メモ情報の読み取り</string>
<string name=”permission_memo_read_description”>
作成したメモの情報を読み取ります</string>
<string name=”permission_memo_write_label”>メモ情報の編集</string>
<string name=”permission_memo_write_description”>作成したメモ情報を編集します</string>
●216ページのコード2行目
(誤)|| writeToFile(outputFile, memo)) {
(正)|| !writeToFile(outputFile, memo)) {
●227ページ 本文上から7行目の最後に追加(コードの直前)
(追加)
なお、”@string/memo.hint”に対応する文字列は「メモを入力」になります。
●231ページ 表「strings.xml」の1行目の修正と4つの項目の削除
(誤)setting_screen
(正)settings_screen
(以下の4つの項目を削除)
key_screen_reverse
key_file_name_prefix
key_text_size
key_text_style
●235ページのコード「SettingFragment.java」で設定」のコードの7行目
(誤)SettingRepository.PREF_FILE_NAME);
(正)SettingPrefUtil.PREF_FILE_NAME);
●235ページ コードの下の本文2行目
(誤)なお、SettingRepositoryは設定情報を
(正)なお、SettingPrefUtilは設定情報を
●246ページ 2つ目の表「「dimers.xml」に追加する項目」の表タイトル
(誤)dimers.xml
(正)dimens.xml
●246ページ 2つ目の表「「dimers.xml」に追加する項目」の「タイプ」の指定
(誤)dime
(正)dimen
●248ページ 下のコードの6行目
(誤)ViewHolder holder = new ViewHolder();
(正)ViewHolder holder = new ViewHolder(view);
●250ページ 下のコードの下から2行目
(誤)setListAdapter(mAdapter);
(正)setListAdapter(adapter);
●262ページ コード「メモ入力画面の「menu/menu_memo.xml」」。build.gradle内にappcompat-v7ライブラリが追加されている場合に発生するエラーへの対応修正のコード
<menu xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:app=”http://schemas.android.com/apk/res-auto”>
<item android:id=”@+id/action_settings”
android:title=”@string/action_settings”
android:orderInCategory=”100″
app:showAsAction=”ifRoom”
android:icon=”@drawable/ic_setting”/>
<item android:id=”@+id/action_save”
android:title=”@string/action_save”
android:orderInCategory=”101″
app:showAsAction=”ifRoom”
android:icon=”@drawable/ic_save”/>
</menu>
●263ページ コード「通常レイアウトでのメモ一覧画面の「menu/menu_main.xml」」。build.gradle内にappcompat-v7ライブラリが追加されている場合に発生するエラーへの対応修正のコード
<menu xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:app=”http://schemas.android.com/apk/res-auto”>
<item android:id=”@+id/action_settings”
android:title=”@string/action_settings”
android:orderInCategory=”100″
app:showAsAction=”ifRoom”
android:icon=”@drawable/ic_setting”/>
</menu>
●264ページ コード「横幅が広い画面レイアウトのメモ一覧画面の「menu-w900dp/menu_main.xml」」。build.gradle内にappcompat-v7ライブラリが追加されている場合に発生するエラーへの対応修正のコード
<menu xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:app=”http://schemas.android.com/apk/res-auto”>
<item android:id=”@+id/action_settings”
android:title=”@string/action_settings”
android:orderInCategory=”100″
app:showAsAction=”ifRoom|withText”
android:icon=”@drawable/ic_setting”/>
<item android:id=”@+id/action_save”
android:title=”@string/action_save”
android:orderInCategory=”101″
app:showAsAction=”ifRoom|withText”
android:icon=”@drawable/ic_save”/>
</menu>
●264ページ 本文最下行に以下を追加
(追加)
次ページからの記述にしたがってアクティビティを追加したら、143ページで行ったように、マニフェストファイルに忘れずに定義してください。
●265ページ コード「メモ入力画面の「MemoActivity.java」」の1行目を、build.gradle内にappcompat-v7ライブラリが追加されている場合に発生するエラーへの対応修正
(1行目の修正コード)
public class MemoActivity extends AppCompatActivity {
●267ページ コード「設定画面の「SettingActivity.java」」の1行目を、build.gradle内にappcompat-v7ライブラリが追加されている場合に発生するエラーへの対応修正
(1行目の修正コード)
public class SettingActivity extends AppCompatActivity
●269ページ コード「起動画面の「MainActivity.java」」の1行目を、build.gradle内にappcompat-v7ライブラリが追加されている場合に発生するエラーへの対応修正
(1行目の修正コード)
public class MainActivity extends AppCompatActivity
●289ページ コードの下から13行目
(誤)style=”@style/Articles.Title”
(正)style=”@style/List.Title”
●291ページ コードの上から4行目から10行目
(誤)
int size = mSites.size();
int position = -1;
for (int i = 0; i < size; i++) {
Site site = mSites.get(i);
if (siteId == site.getId()) {
mSites.remove(position);
notifyDataSetChanged();
(正)
Iterator<Site> iterator = mSites.iterator();
while(iterator.hasNext()) {
Site site = iterator.next();
if (siteId == site.getId()) {
iterator.remove();
notifyDataSetChanged();
●291ページ コードの下から10行目の
(誤)return position;
(正)return mSites.get(position).getID();
●314ページ 本文6行目の下、Tipsの前に以下を追加
(追加)
また、インターネット通信を行う場合、次のパーミッションをマニフェストに追記しておく必要があります。
●340ページ 上のコードの2行目
(誤)dialog.show(getFragmentManager(), TAG_INPUT_DIALOG);
(正)dialog.show(getFragmentManager(), TAG_DIALOG_FRAGMENT);
●340ページ 上のコードの下から2行目
(誤)dialog.show(getFragmentManager(), TAG_INPUT_DIALOG);
(正)dialog.show(getFragmentManager(), TAG_DIALOG_FRAGMENT);
●341ページ 上のコードの10行目
(誤)long targetFeedId = data.getLongExtra(“feed_id”, -1L);
(正)long targetFeedId = data.getLongExtra(“site_id”, -1L);
●342ページ コードの下から13行目
(誤)if (id == LOADER_LOAD_FEED
(正)if (id == LOADER_LOAD_SITES
●342ページ コードの下から9行目
(誤)} else if (id == LOADER_ADD_FEED) {
(正)} else if (id == LOADER_ADD_SITE) {
●343ページ コードの上から3行目
(誤)} else if (id == LOADER_DELETE_FEED) {
(正)} else if (id == LOADER_DELETE_SITE) {
●363ページ コードとコラムの間に本文を追加
(追加)
サービスも、アクティビティと同じく、マニフェスト内で定義すべきコンポーネントです。次の定義を、マニフェストのapplicationタグ内に追加してください。
●368ページ コードの前の本文の最後に追加
(追加)
なお、JobServiceもサービスですので、他のサービスと同じくマニフェスト内で定義します。また、JobServiceには「BIND_JOB_SERVICE」というパーミッションも必要とされます。
<service android:name=”.PollingJob” android:permission=”android.permission.BIND_JOB_SERVICE”/>
●383ページ コードの上から3行目
(誤)//リンクがタブされたら、
(正)//リンクがタップされたら、
●387ページ 本文の最下行に以下を追加
(追加)
アプリ内でカメラを操作する場合、次のパーミッションをマニフェスト内で宣言する必要があります。
<uses-permission android:name=”android.permission.CAMERA”/>
●394ページ ページ下のコード「API Level21未満用のカメラ機能を実装する「camera/CameraLegacyFragment.java」」の2行目の下に次の1行を追加(//カメラオブジェクトの前に)
(追加)
private static final int REQUEST_CAMERA_PERMISSION = 1;
//カメラオブジェクト
●402ページのコード「プレビューを正しく修正した「camera/CameraLegacyFragment.java」」の2行目にパーミッションの取得処理を追加(「//Cameraへのアクセスを取得する」のコメントの前に追加)
(追加)
// パーミッションチェック
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
// パーミッションを求めるダイアログを表示する
FragmentCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},
REQUEST_CAMERA_PERMISSION);
return;
}
●402ページのコード「プレビューを正しく修正した「camera/CameraLegacyFragment.java」」の6行目
(誤)setDisplayRotation();
(正)setDisplayOrientation();
●429ページ 本文下から2行目
(誤)この実装は後述します。
(正)この実装はサンプルプロジェクトを参照してください。
●431ページ 上のコードの上から2行目
(誤)private LoaderManager.LoaderCallbacks> mDBLoader
(正)private LoaderManager.LoaderCallbacks> mDBLoaderCallback
●455ページ コードの下、本文3行目
(誤)する前に、地位情報リクエスト用
(正)する前に、位置情報リクエスト用
●461ページ 表「「location/Place.java」のフィールドとメソッド」の下に以下の本文を追加
(追加)
また、「Place」クラスには、アプリ内で使用する日付書式の定義として、次の定数を追加してください。
public static final String DATE_STR_FORMAT = “%1$tF”;
●467ページ 本文最下行に以下を追加
(追加)
なお、「PlaceStoreService」は、次のようにマニフェスト内で定義することも忘れず行っておいてください。
<service android:name=”.PlaceStoreService” android:exported=”false”/>
●475ページ コード「ナビゲーションドロワーのフラグメントの実装(「location/LoggedDataFragment.java」)」のコードの1行目・2行目
(誤)public class LoggedDataFragment extends ListFragment
implements LoaderManager.LoaderCallbacks> {
(正)public class LoggedDataFragment extends ListFragment {
●484ページ 上のコードの最後に以下のコードを追加(本文の前に)
(追加)
// コンテントプロバイダの変更を監視するオブザーバ
private ContentObserver mObserver = new ContentObserver(mHandler) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
// Loaderを初期化する
getLoaderManager().restartLoader(
PLACE_LOADER, getArguments(), mCallback);
}
};
●485ページ 上のコードの11行目
(誤)getContext().getResources().getDisplayMetrics().density;
(正)getActivity().getResources().getDisplayMetrics().density;
●492ページ 本文下から3行目と2行目の間に以下の文を追加
(追加)
Toolbarを使用する場合、デフォルトのActionBarを外す必要があります。ActionBarの使用はテーマで定義されており、「styles.xml」の下記の指定を、
<style name=”AppTheme” parent=”Theme.AppCompat.Light.DarkActionBar”>
次のように修正しておきます。
<style name=”AppTheme” parent=”Theme.AppCompat.Light.NoActionBar”>
●494ページ 本文9行目
(誤)興味を惹かれれたなら
(正)興味を惹かれたなら