Android - Spinner.OnItemSelectedListener的高级用法

时间:2014-11-16 15:57:43

标签: android spinner onselect

我通常使用布尔值,但在这种情况下,我不能。我的 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

            }

        });

问题是当我使用bolean时会发生的事情是,如果用户选择默认值,那么作为Default的选择不会显示DialogBox。例如“Tomato”为Default,用户也想选择“Tomato”;没有任何事情发生。

我想要做的是防止此对话框在活动打开时尽快出现,但我也想阻止“在选择默认值时没有任何反应”问题。

那么,有没有办法确切地检查用户是否按下了选择?

1 个答案:

答案 0 :(得分:0)

您可以使用布尔变量来确定是否刚刚加载了微调器,因此可以阻止在打开活动(或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

           }
    });