Ho trovato un sacco di domande sullo stesso argomento, ma non sono in grado di capire cosa sto facendo male quiCome risolvere "Il contenuto dell'adattatore è cambiato ma ListView non ha ricevuto notifica" eccezione
Eccezione: "Il contenuto dell'adattatore è cambiato ma ListView non ha ricevuto una notifica. Assicurati che il contenuto dell'adattatore non venga modificato da un thread in background, ma solo dal thread dell'interfaccia utente "
Ho un TextWatcher sul mio AutoCompleteTextView. Sto cercando di aggiornare l'elenco a discesa quando il testo cambia. dati per la discesa da due fonti diverse. E ognuno di loro esecuzione all'interno fili diversi.
mTextWatcher = new TextWatcher() {
public void afterTextChanged(Editable editable) {
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
suggestionNewText = s.toString();
list = new ArrayList<Map<String, String>>();
runOnUiThread(new Runnable() {
@Override
public void run() {
//data processing
list.add(data);
handler.sendEmptyMessage(1);
}
});
Thread webAutoComplete = new Thread(new Runnable() {
@Override
public void run() {
//data process
list.add(data);
handler.sendEmptyMessage(1);
}
});
try {
webAutoComplete.start();
} catch (NullPointerException e) {
} catch (IllegalStateException e) {
}
}
};
E gestore per l'adattatore è vicino al textwatcher.
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1: {
((Activity) CONTEXT).runOnUiThread(new Runnable() {
public void run() {
try {
if (list != null)
suggestionAdapter = new UrlSuggestionAdapter(
CONTEXT,
list,
R.layout.two_line_autocomplete,
new String[] { "title", "url" },
new int[] { R.id.title, R.id.url
});
if (list != null) {
refreshAdapter(list);
getUrl.setAdapter(suggestionAdapter);
}
} catch (Exception e) {
}
}
});
break;
}
case 2: {
break;
}
}
}
};
public synchronized void refreshAdapter(List<Map<String, String>> items) {
list = items;
if (list != null) {
suggestionAdapter.notifyDataSetChanged();
}
}
l'intero codice sopra è all'interno di Attività O metodo nCreate(). Non ottengo sempre l'eccezione. Succede in occasione specifica. Questo problema non è stato ancora risolto. Ho aggiunto il metodo notifydatasetchanged() dopo la creazione della scheda. Ancora questo non risolve il problema. Qualcuno può far notare cosa sto facendo male qui?
qual è il punto di verifica se suggerimentoAdapter è nullo dopo aver creato un nuovo suggerimentoAdapter ogni volta? Non sono io che lo sottovaluta, ma il formato dei tuoi codici può essere difficile da leggere senza parentesi. – Neoh
Domanda aggiornata – intrepidkarthi
Prova a chiamare suggestionAdapter.notifyDataSetChanged() dopo aver creato il nuovo adattatore – Neoh