Nat*_*han 4 android autocomplete
我有一个带有自动完成框的活动.每当文本更改时,我想调用Web服务并使用返回的新String []填充ArrayAdapter.这部分一切都很好,除了在String []学校中有所有新值时UI中的列表没有被刷新.我的onCreate中填充的原始列表始终保留.
我在某个地方读到了我需要在运行UI的同一个线程上更新它,所以我尝试了下面代码中列出的Runnable.但是,只是更新我的类变量学校并不与notifyOnDataSetChange()一起工作
我哪里错了?
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
schools = SchoolProxy.search("Co");
autoCompleteAdapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line, schools);
autoComplete = (AutoCompleteTextView) findViewById(R.id.edit);
autoComplete.addTextChangedListener(textChecker);
autoComplete.setAdapter(autoCompleteAdapter);
}
...
....
...
final TextWatcher textChecker = 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)
{
schools = SchoolProxy.search(s.toString());
runOnUiThread(updateAdapter);
}
};
private Runnable updateAdapter = new Runnable() {
public void run() {
autoCompleteAdapter.notifyDataSetChanged();
}
};
Run Code Online (Sandbox Code Playgroud)
作为一个不那么重要的旁注,如果学校中的每个项目都有一个名称\n city,n.是否可以在自动下拉框中将城市和州置于第二线?仅用于格式化目的.如果可以,会看起来更清洁.
谢谢!
你试过setNotifyOnChange(true)
吗?无论何时使用更改列表的方法,都应该正确地执行您正在执行的操作(add(T), insert(T, int), remove(T), clear())
.也许你必须通过这些方法修改数组ArrayAdapter
?
我不确定是否ArrayAdapter
实际上是持有学校的参考,或者只是在构建时复制了内容ArrayAdapter
.也许你可以看看AOSP代码,看看他们在那个构造函数中做了什么.
归档时间: |
|
查看次数: |
15821 次 |
最近记录: |