问题描述
我正在尝试在表单中实现 AutoCompleteTextField,该表单只接受作为建议列表一部分的输入值,如果不是这种情况,则在提交时设置字段错误。
以下是从 HTTP GET 请求到我的本地 Web API 创建和设置 ArrayAdapter 的代码:
private void createCompanyAutoComplete(){
HTTPRequestsHandler.getInstance().volleyGet("companies",new VolleyCallback() {
@Override
public void onSuccess(JSONArray response) {
String[] companyNames = new String[response.length()];
for (int cnt = 0; cnt < response.length(); cnt++) {
try {
JSONObject currentCompany = response.getJSONObject(cnt);
companyNames[cnt] = currentCompany.getString("companyName");
} catch (JSONException e) {
e.printstacktrace();
}
}
AutoCompleteTextView companyAutoComplete = (AutoCompleteTextView) getActivity().findViewById(R.id.companyAutoCompleteTextView);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(),android.R.layout.simple_list_item_1,companyNames);
companyAutoComplete.setAdapter(adapter);
}
@Override
public void onError(VolleyError error) {
Log.e(this.getClass().getCanonicalName(),"Error while fetching companies data. Error: " +error.getMessage());
}
});
}
我在页面上使用的 Fragment 的 onCreate 方法中调用此方法。
然后,在 Activity 中,我尝试获取自动填充选项并使用它们使用以下代码验证输入:
AutoCompleteTextView companiesAutoComplete = (AutoCompleteTextView) findViewById(R.id.companyAutoCompleteTextView);
String selectedCompany = companiesAutoComplete.getText().toString();
CharSequence[] companies = companiesAutoComplete.getAdapter().getAutofillOptions();
boolean companyFlag = false;
for(int cnt = 0; cnt< companies.length; cnt ++){
if(companies[cnt].equals(selectedCompany))
companyFlag = true;
}
即使设置了适配器并且我在字段内输入时看到了正确的建议, 由于某种原因,从 getAutoFillOptions 返回的公司数组为空。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)