Проблема в том, что я не могу обновить adapter
после того, как он был установлен. Для первого символа он отлично работает, но если я хочу его изменить, то adapter
продолжает просматривать те же предложения. Как я могу обновить adapter
? Вот мой код.Обновление адаптера после afterTextChanged()
public class UzActivity extends Activity {
private static final String DEBUG_TAG = "HttpExample";
List<String> responseList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_uz);
responseList = new ArrayList<String>();
final String url = "http://booking.uz.gov.ua/purchase/station/";
final AutoCompleteTextView textView = (AutoCompleteTextView)
findViewById(R.id.autoCompleteTextView1);
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, responseList);
textView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length()>0 && responseList.isEmpty()){
try {
new FetchStationTask().execute(url + URLEncoder.encode(s.toString(), "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
textView.setAdapter(adapter);
}
else if(s.length()==0){
responseList.clear();
}
}
});
}
private class FetchStationTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... urls) {
try {
return new UzFetcher().getUrlString(urls[0]);
} catch (IOException e) {
return "Unable to retrieve web page. URL may be invalid.";
}
}
@Override
protected void onPostExecute(String result){
try {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
StationResponse st = objectMapper.readValue(result, StationResponse.class);
for (int i = 0; i<st.mStations.size(); i++){
responseList.add(st.mStations.get(i).getTitle());
}
Log.i(DEBUG_TAG, responseList.get(0));
} catch (IOException e) {
e.printStackTrace();
}
Log.i(DEBUG_TAG, result);
}
}
Да, я пытался, но он не работает. Может быть, мне нужно настроить adater в asynctask? – lopoly
вы должны настроить свой адаптер в 'onPostExecute' с' notifyDataSetChanged' под целым 'try..catch'. вы также можете использовать фильтрацию, если она соответствует вашим целям [(пример здесь)] (http://stackoverflow.com/questions/5780289/filtering-listview-with-custom-object-adapter) – snachmsm