use*_*839 3 android adapter autocompletetextview
我使用ArrayList和ArrayAdapter来记录AutoCompleteTextView的内容,我想在修改列表时动态刷新AutoCompleteTextView.在webviewClient中触发列表的修改.
但是,我的代码不起作用.只有在重新加载整个活动时才能更新AutoCompleteTextView.根本没有动态更新.任何人都可以帮我找出问题所在吗?
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mHistory); //mHistory is the list of data
adapter.setNotifyOnChange(true);
mEditText1.setAdapter(adapter); //mEditText1 is the AutoCompleteTextView
mWebView1.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url){
super.onPageFinished(view, url);
if (!mHistory.contains(mWebView1.getUrl())){
mHistory.add(mWebView1.getUrl());
writeList(view.getContext(), mHistory, "history"); //this is to store the list elsewhere
}
adapter.notifyDataSetChanged();
}
});
Run Code Online (Sandbox Code Playgroud)
小智 5
我建议你尽量不要修改你的列表mHistory,而是修改你ArrayAdapter的使用add(),clear()等等.
adapter.add(mWebView1.getUrl());
Run Code Online (Sandbox Code Playgroud)
此外,如果这不会有帮助,您可以尝试创建自己的自定义适配器而不是默认适配器ArrayAdapter.你可以通过公共功能强制过滤callFiltering自定义适配器可能是这样的:
public class CustomArrayAdapter extends ArrayAdapter<String> implements
Filterable {
private List<String> list;
private CustomFilter customFilter;
public CustomArrayAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
list = new ArrayList<String>();
}
@Override
public void add(String object) {
list.add(object);
notifyDataSetChanged();
}
@Override
public void clear() {
list.clear();
}
@Override
public int getCount() {
return list.size();
}
@Override
public String getItem(int position) {
return list.get(position);
}
@Override
public CustomFilter getFilter() {
if (customFilter == null) {
customFilter = new CustomFilter();
}
return customFilter;
}
public void callFiltering(String term) {
customFilter.performFiltering(term);
}
private class CustomFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null) {
results.values = list;
results.count = list.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5429 次 |
| 最近记录: |