戻るボタンの制御について
色揃えるやつでは、パズル画面より戻った際に、リストに"CLEARED"と表示されます。
あと、クリア後に"Retry"ボタンが存在します。
このため、初回クリア後、"Retry"が押され、そのまま戻るボタンを押されると、リストの再描画のタイミングが無く、"CLEARED"が表示されませんでした。
そこで、戻るボタンを押下した際に、呼び出し元Activityに結果を返却することにしました。
まず、呼び出す際に、Activity#startActivityForResultにて呼び出すように変更。
で、呼び出し元ActivityにonActivityResultメソッドを実装。その中で、受け取ったクリア情報より内部保持しているリストを更新し、ArrayAdapter#notifyDataSetChangedを呼び出し。
あと、呼び出される側に下記の処理を追加。
@Override public boolean dispatchKeyEvent(KeyEvent e) { if (e.getKeyCode() == KeyEvent.KEYCODE_BACK) { if (e.getAction() == KeyEvent.ACTION_DOWN) { // 戻るボタンが押された場合 // 結果を設定 Intent intent = new Intent(); intent.putExtra("item", item); setResult(RESULT_OK, intent); finish(); return true; } } return super.dispatchKeyEvent(e); }
戻るボタンを押された際には、現在のステージ情報を必ず返すようにしました。
戻り値についてですが、dispatchKeyEventメソッドのJavaDocには下記のように記載されています。
Return true if this event was consumed.
エキサイト翻訳によると、
この出来事が消費されたなら、本当に戻ってください。
と、いうことなので、この場合はtrueを返すのが正解っぽいです。
ちなみに、"KeyEvent.ACTION_DOWN"ではなく、"KeyEvent.ACTION_UP"としてしまうと、2画面戻るといった、よくわからない動きをしてしまいます。
0.5から、0.5.2へバージョンアップしたのは、これを修正しました。