Activity遷移でSpinnerのDefaultSelectionに苦しんだ話

アプリの起動時にはSpinnerの最初の項目をEditTextに表示したい。

別のActivityを起動して新たに項目を選択した場合は新しい項目をEditTextに表示したい。

でも元のActivityに制御が戻ったときにSpinnerのEditTextやらSpinnerの初期化をやってしまうと、結局Activtyで選択した項目がロストしてしまう。

とりあえずSpinnerのDefaultSelectionの問題はカウンタを使って回避した。リスナーを登録する前にカウンタをゼロクリアすることで対応。コードはこんな感じ。

    int chkSpinnerMusic = 0;
    private AdapterView.OnItemSelectedListener onMusicItemSelected = new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent,
                                   View view, int position, long id) {
            if( chkSpinnerMusic++ <= 0 ) {
                Log.d(DTAG, "onMusicItemSelected Skip 1st default selection.");
                return;
            }

新しいActivityでの選択が無効になってしまう問題については、OnActivityResultでセットして、OnResumeでフラグをリセットして、フラグが立っている処理を迂回、という感じで対応。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です