AutoCompleteTextView 适配器问题

后卫

我有一个 AutoCompleteTextView,根据它的变化,它显示带有来自服务器的数据的下拉列表。在更改每个符号后,通过侦听器向服务器发出请求并获取一些列表。

之后我在 AutoCompleteTextView 中显示该列表,在代码中我这样做:

List<String> list = new ArrayList<String>();
for (int i = 0; i < jsonArray.length(); i++) {
    list.add(jsonArray.getJSONObject(i).getString("title"));
}
String[] cities = list.toArray(new String[list.size()]);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(DistanceCalculation.this, R.layout.support_simple_spinner_dropdown_item, cities);
AutoCompleteTextView my = (AutoCompleteTextView) myView;
my.setAdapter(adapter);

问题是它通常只显示列表的第一个元素,长按后显示完整列表。我不明白为什么会发生。

对不起,英语不好,提前致谢!您也可以检查下面的其余代码:

xml部分:

<AutoCompleteTextView
 android:id="@+id/from"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_alignParentLeft="true"
 android:layout_alignParentStart="true"
 android:layout_marginTop="15dp"
 android:background="@drawable/td_inp"
 android:hint="Откуда"
 android:paddingBottom="5dp"
 android:paddingLeft="5dp"
 android:paddingRight="5dp"
 android:paddingTop="5dp"
 android:textColor="#000"
 android:textColorHint="#757575" />

AutoCompleteTextView 及其在 onCreate 中的侦听器

tCityFrom = (AutoCompleteTextView) findViewById(R.id.from);
tCityFrom.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) {
        if(s.length() >= 2) load_city(ssid, s.toString(),tCityFrom);
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
    public void onTextChanged(CharSequence s, int start, int before, int count) {}
}); 
大信鲁巴姆

我假设您想根据用户类型显示自动完成建议。您必须从服务器加载数据onTextChanged()

tCityFrom = (AutoCompleteTextView) findViewById(R.id.from);
tCityFrom.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) { }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if(s.length() >= 2) 
            load_city(ssid, s.toString(),tCityFrom);
   }
}); 

然后全局声明ArrayListAdapter

List<String> list;
ArrayAdapter<String> adapter;

onCreate()

list = new ArrayList<String>();
adapter = new ArrayAdapter<String>(DistanceCalculation.this, R.layout.support_simple_spinner_dropdown_item, cities);
AutoCompleteTextView my = (AutoCompleteTextView) myView;
my.setAdapter(adapter);

load_city()用下面的代码替换你的第一个代码片段

list.clear();
for (int i = 0; i < jsonArray.length(); i++) {
    list.add(jsonArray.getJSONObject(i).getString("title"));
}
adapter.notifyDataSetChanged();

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章