gpt4 book ai didi

android - 为什么我不能动态更新 AutoCompleteTextView?

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:52 24 4
gpt4 key购买 nike

我使用一个ArrayList 和一个ArrayAdapter 来记录AutoCompleteTextView 的内容,我想在修改列表时动态刷新AutoCompleteTextView。列表的修改在 webviewClient 中触发。

但是,我的代码不起作用。 AutoCompleteTextView 只能在重新加载整个 Activity 时更新。根本没有动态更新。谁能帮我找出问题所在?

    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();

}

});

最佳答案

我建议您尽量不要修改您的列表 mHistory,而是使用 add() 修改您的 ArrayAdapterclear() 等等。

adapter.add(mWebView1.getUrl());

此外,如果这样做没有帮助,您可以尝试创建自己的自定义适配器而不是默认的 ArrayAdapter。您可以在需要时通过公共(public)函数 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();
}
}

}

}

关于android - 为什么我不能动态更新 AutoCompleteTextView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15861017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com