同じトピックについて多くの質問がありましたが、ここで間違っていることがわかりません。解決方法「アダプタの内容は変更されましたが、ListViewは通知を受け取りませんでした」例外
例外: "アダプタの内容は変更されましたが、ListViewは通知を受け取りませんでした。あなたのアダプターの内容は、UIスレッドからのみ、バックグラウンドスレッドから変更されていないことを確認してください。 "
TextComponentをAutoCompleteTextViewに持っています。テキストが変更されたときにドロップダウンリストを更新しようとしています。 2つの異なるソースからのドロップダウンのためのデータ及び異なるスレッド内で実行されているそれらのそれぞれ。
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) {
}
}
};
とアダプタのハンドラは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();
}
}
上記全体のコードであります活動の中のO nCreate()メソッド。私は例外を常に得ることはありません。それは特定の機会に起こります。この問題はまだ解決されていません。アダプタの作成後にnotifydatasetchanged()メソッドを追加しました。それでも問題は解決しません。誰でも私がここで間違っていることを指摘できますか?
いつでも新しいsuggestionAdapterを作成した後、suggestionAdapterがnullであるかどうかを確認するポイントは何ですか?私はこれを下降させる人ではありませんが、あなたのコードフォーマットは適切な角括弧なしでは読みにくい場合があります。 – Neoh
質問が更新されました – intrepidkarthi
新しいアダプタを作成した後、suggestionAdapter.notifyDataSetChanged()を呼び出してみてください – Neoh