はじめてのAndroidアプリ開発。独学でやってみる(3)

2018年11月22日

前回につづき、TODOアプリの作成です。

以下の機能を実装していきます。

  • ヘッダにハンバーガーメニューの追加
  • タスク内容をストレージに保存

メニューの追加

公式サイトによれば、オプション メニュー、コンテキスト メニュー、ポップアップ メニューがあるようですが、今回はオプション メニューを使います。

しかーし、サンプル通りにいきません。「android:showAsAction=”never”」の部分でエラーになります。

Should use app:showAsAction with the appcompat library with xmlns:app="http://schemas.android.com/apk/res-auto" less... (Ctrl+F1) 
When using the appcompat library, menu resources should refer to the showAsAction (or actionViewClass, or actionProviderClass) in the app: namespace, not the android: namespace.  Similarly, when not using the appcompat library, you should be using the android:showAsAction (or actionViewClass, or actionProviderClass) attribute.

おそらくバージョンの差異かな?エラーメッセージの通りに修正すると、エラーが消えました。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
	
	<item ...
	app:showAsAction="never" />
</menu>

今回はオプション メニューを試してみましたが、コンテキスト メニュー(リストビューの長押しで表示するメニュー)も使う場面が多そうです。

ストレージに保存

ストレージの種類は4つ

  • 共有の環境設定⇒アプリの環境変数
  • 内部ストレージ⇒容量の小さいテキストやバイナリデータ
  • 外部ストレージ⇒動画や画像データ
  • SQLite データベース⇒アプリの環境変数やデータ処理など

タスク内容(ArrayList)の情報を保存したいので、内部ストレージを利用しました。
Javaの従来通りのやり方(FileOutputStream/FileInputStream)なので、特に何もないですね。

・・・と、言いたいところですがストレージに書き出すタイミングでハマりました。
アプリを終了する際に保存したい場合は、onPauseでいいのだろうか。
onStopやonDestroyは呼ばれない可能性があるので。

Activityのライフサイクルについて、しっかり理解しないとアカンですね。

ソースコードをgithubに置きました。もしよければ参考ください。