読者です 読者をやめる 読者になる 読者になる

戻るボタンの制御について

色揃えるやつでは、パズル画面より戻った際に、リストに"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へバージョンアップしたのは、これを修正しました。