gpt4 book ai didi

android - AutoCompleteTextView 在适配器更改时隐藏和显示下拉列表

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

我有一个 AutoCompleteTextView,它从带有 AsyncTask 的 API 获取建议。在 onPostExecute 中,我创建了一个新适配器,将其设置为 AutoCompleteTextView 并将数据集更改通知适配器。

我在 TextWatcher 中执行 AsyncTask。

除了每次更改适配器时都会关闭和显示下拉菜单外,一切正常。

如何在数据发生变化时保持下拉菜单打开?

searchText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub

}

@Override
public void afterTextChanged(Editable s) {
if (s.length() > 0) {
searchPlacesTask.cancel(true);
searchPlacesTask = new SearchPlacesTask();
searchPlacesTask.execute(s.toString().replace(" ", "-"));
} else {
searchPlacesTask.cancel(true);
searchPlacesTask = new SearchPlacesTask();
searchPlacesTask.execute();
}
}
});



private class SearchPlacesTask extends AsyncTask<String, Void, PlacesAPIResult> {

@Override
protected PlacesAPIResult doInBackground(String... params) {
PlacesAPIResult result = new PlacesAPIResult();

if (params.length > 0) {
places = PlacesAPIRestMethod.placeAutocomplete(params[0], currentLocation.getLatitude(), currentLocation.getLongitude(),
500, null, result);
} else {
places = PlacesAPIRestMethod.placeSearch(currentLocation.getLatitude(), currentLocation.getLongitude(), 0, true, result);
}

return result;
}

@Override
protected void onPostExecute(PlacesAPIResult result) {
if (result.getResult() == PlacesAPIResult.OK) {
adapter = new PlaceAdapter(ChooseLocationActivity.this, R.layout.locationrow, places);
searchText.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
}

最佳答案

在适配器中实现 Filterable,并添加此代码。

public class ListAdapter extends ArrayAdapter<String> implements Filterable{


private List<String> listResult;

...
@Override
public Filter getFilter() {
Filter filter = new Filter() {

@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
// Assign the data to the FilterResults
filterResults.values = listResult;
filterResults.count = listResult.size();
}
return filterResults;
}

@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
}};
return filter;
}
}

关于android - AutoCompleteTextView 在适配器更改时隐藏和显示下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11010442/

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