数组适配器 ```getItem(position)``` 第一次返回 null(但下次检查时工作正常)

Array Adapter ```getItem(position)``` returning null first time (but works fine on next time check)

我使用自定义布局和 AutoCompleteTextView 创建了一个 下拉列表 。 单击提交按钮时,我正在检查用户是否从该下拉列表中选择了任何项目。

但是即使选择了一个项目,第一次验证检查时也会出现验证错误,而不是没有错误。

下面的代码用于设置我的下拉菜单。

//Ambulance Types Dropdown Data
            ambulanceTypes = context.getResources().getStringArray(R.array.ambulance_types);
            ambulanceAdapter = new ArrayAdapter<>(context, R.layout.dropdown_item, ambulanceTypes);
            ambulanceDropdown = findViewById(R.id.autoCompleteTextView1);
            ambulanceDropdown.setAdapter(ambulanceAdapter);

我创建了一个 String 变量来获取其中的选定值,如下面的代码所示。

String ambulanceTypesValue;
ambulanceDropdown.setOnItemClickListener((adapterView, view, position, l) -> ambulanceTypesValue = ambulanceAdapter.getItem(position));

下面是我在单击按钮时调用的验证方法。

private boolean checkAmbulanceTypes() {
        ambulanceDropdown.setOnItemClickListener((adapterView, view, position, l) -> ambulanceTypesValue = ambulanceAdapter.getItem(position));
        if (ambulanceTypesValue == null) {
            ambulanceDropdown.requestFocus();
            ambulanceDropdown.setError("Please select an ambulance.");
            return false;
        } else {
            ambulanceDropdown.setError(null);
            return true;
        }
    }

关于如何完成此任务有什么建议吗?

通过将此代码行重复添加到 onResume() 方法中解决了问题。

ambulanceDropdown.setOnItemClickListener((adapterView, view, position, l) -> ambulanceTypesValue = ambulanceAdapter.getItem(position));

详情: 该行代码正在从下拉列表中获取选定值,我在 onResume() 方法中重复该行代码以解决问题。

好的,看我的朋友你写的信息很少,但我会尽力帮助你。

首先: 从您的函数中删除 ambulanceDropdown.setOnItemClickListener 并将字符串作为参数传递

private boolean checkAmbulanceTypes(String Types) {
        if (Types == null) {
            ambulanceDropdown.requestFocus();
            ambulanceDropdown.setError("Please select an ambulance.");
            return false;
        } else {
            ambulanceDropdown.setError(null);
            return true;
        }
    }

第二:

String ambulanceTypesValue;
ambulanceDropdown.setOnItemClickListener((adapterView, view, position, l) -> ambulanceTypesValue = ambulanceAdapter.getItem(position));

从上面的代码中删除此字符串,并在 ambulanceDropdown.setOnItemClickListener 中将您的函数作为您的代码

    ambulanceDropdown.setOnItemClickListener((adapterView, view, position, l) -> checkAmbulanceTypes(ambulanceAdapter.getItem(position)));

现在您的适配器可以正常工作,您将在 setOnItemClickListener 中获得一个布尔值。

注意: 如果您更喜欢使用 String ambulanceTypesValue 来获取使用的项目,只需更改为

 String ambulanceTypesValue;
    ambulanceDropdown.setOnItemClickListener((adapterView, view, position, l) -> ambulanceTypesValue = ambulanceAdapter.getItem(position);
    );
    
    /*and on click button*/
    
    onclick{
    checkAmbulanceTypes(ambulanceTypesValue);
    ambulanceTypesValue=null;/*to clear value*/
    }