数组适配器 ```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*/
}
我使用自定义布局和 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*/
}