0

私は通常これにブール値を使用しますが、この状況ではできません。Spinnerに以下のようなコードがあり、すべて正常に動作します。

spin.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {

                        carNames = brand.getChildCarNames(brand.getListDataHeader().get(position));
                        makeAndShowDialogBox();

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub

            }

        });

問題は、ボリアンを使用すると、ユーザーがそのデフォルト値も選択した場合、デフォルトとして選択されたダイアログボックスが表示されないことです。「トマト」などはデフォルトで提供され、ユーザーは「トマト」も選択したいと考えています。よりも何も起こりません。

私がやりたいことは、アクティビティが開かれたときにこのダイアログボックスができるだけ早く表示されるのを防ぐことですが、「デフォルト値を選択しても何も起こらない」という問題も防ぎたいです。

では、ユーザーが選択を押したかどうかを正確に確認する方法はありますか?

4

1 に答える 1

0

Boolean 変数を使用して、スピナーがロードされたばかりかどうかを判断できるため、アクティビティが開かれたとき (または onResume) にダイアログが表示されないようにすることができます。リスナーの外部で変数を宣言し、リスナーの内部でその値を変更できます。その値はリスナー内で変更されるため、通常のブール値の代わりに最終的なブール値配列を実行する必要があります。

次のコードで試すことができます。

  final Boolean[] spinnerLoaded = {false};

     spin.setOnItemSelectedListener(new OnItemSelectedListener() {

           @Override
           public void onItemSelected(AdapterView<?> parent, View view,
                            int position, long id) {

                if (!spinnerLoaded[0]) {
                    spinnerLoaded[0] = true;
                }
                else {
                   carNames = brand.getChildCarNames(brand.getListDataHeader().get(position));
                   makeAndShowDialogBox();                
                }
           }

           @Override
           public void onNothingSelected(AdapterView<?> parent) {
                        // TODO Auto-generated method stub

           }
    });
于 2014-11-17T20:40:29.470 に答える