初回起動時に1度だけダイアログを出す方法
今回はアプリケーションの初回起動を判定して、ダイアログを出す方法を紹介します。
サンプルコードでは、SharedPreferencesを使い、初回起動を判定します。初回であればダイアログを表示、2度目以降であれば非表示にする等、表示処理を切り替えています。「はじめに」や「利用規約」、「簡単な使い方の説明」など頻繁に見せる必要は無いが、必ず目を通してほしい項目の表示に有効でしょう。
ダイアログ表示以外にも特定のActivityを表示するなどUIを変更したり、データ保存方法をアプリケーションの実装にあわせてSharedPreferences以外を選択したり、応用を考えてみてください。
本記事を読む前に以下内容について確認しておくとスムーズです。
ソースコードは続きから。
起動時の状態保存、初回ダイアログ、起動状態のクリアの3つのステップにわけて解説します。
起動状態の保存
public static final int PREFERENCE_INIT = 0; public static final int PREFERENCE_BOOTED = 1; //データ保存 private void setState(int state) { // SharedPreferences設定を保存 SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); sp.edit().putInt("InitState", state).commit(); //ログ表示 output( String.valueOf(state) ); } //データ読み出し private int getState() { // 読み込み int state; SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); state = sp.getInt("InitState", PREFERENCE_INIT); //ログ表示 output( String.valueOf(state) ); return state; } //データ表示 private void output(String string){ TextView tv = (TextView) findViewById(R.id.TextView); tv.setText("Preference: InitState is " + string); }
setState関数でSharedPreferencesに状態(InitState)を保存します。設定値はPREFERENCE_INIT or PREFERENCE_BOOTEDです。
getState関数ではSharedPreferences#getIntメソッドを利用してInitStateを取得します。第2引数は未保存状態など、取得できなかった場合の初期値です。
デバッグ用にoutput関数を用意しました。TextViewに現在のInitStateを表示し、動作を確認します。
Preference: InitState is [1 or 0]
上記のように、Activity上に現在の状態を表示します。
関連:データを簡単に保存する方法(Preference編)
初回のみダイアログを表示する
//ダイアログ表示 @Override public void onResume(){ super.onResume(); AlertDialog.Builder alertDialog=new AlertDialog.Builder(this); // ダイアログの設定 alertDialog.setTitle("FirstBoot"); //タイトル alertDialog.setMessage("初回メッセージ"); //内容 alertDialog.setIcon(R.drawable.icon); //アイコン設定 alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //初回表示完了 setState(PREFERENCE_BOOTED); } }); // ダイアログの作成と表示 if(PREFERENCE_INIT == getState() ){ //初回起動時のみ表示する alertDialog.create(); alertDialog.show(); } }
17行目:ダイアログのOKボタンを押下した場合のみ、SharedPreferencesのInitStateに初回起動完了(PREFERENCE_BOOTED)を設定します。
22行目:現在の状態に応じて(初回起動のPREFERENCE_INIT時のみ)ダイアログを生成/表示します。
ワンポイント:ライフサイクルに注意 Activity#onResumeでダイアログ表示を実装するのはAndroidアプリケーションのライフサイクルに関係するんだ。アプリの切り替え時など、onCreateメソッドを経由しないケースをフォローしているよ。 ライフサイクルは図解Androidのライフサイクルとプラットフォームで確認してね。 |
起動状態をクリアする
「初回起動時にしか表示されない」という実装はデバッグが難しくなるため、デバッグ用に起動状態(InitState)をクリアするためのOptionメニューを追加します。
public static final int MENU_SELECT_CLEAR = 0; //メニュー作成 public boolean onCreateOptionsMenu(Menu menu){ //Clearボタンの追加 menu.add(0, MENU_SELECT_CLEAR, 0, "Clear") .setIcon(android.R.drawable.ic_menu_close_clear_cancel); return true; } //メニュー実行時の処理 public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_SELECT_CLEAR: //状態を忘れる setState(PREFERENCE_INIT); return true; } return false; }
onCreateOptionsMenuメソッドでオプションメニューのクリアボタン(状態を初期化する)を追加します
17行目:onOptionsItemSelectedメソッドはメニューが選択された場合の処理です。起動状態を初期化します
関連:オプションメニュー(OptionsMenu)を追加する
About The Author
ひつじ(mhidaka)
Software Engineerだよ。DroidKaigi Organizer / Androidと組込とRe:VIEW。techbooster主宰。mhidaka's writings http://booklog.jp/users/mhidaka 技術書典! http://techbookfest.org