[英]listView update doesn't work with static variable
我有一個帶有自定義適配器的ListView。 我想更新ListView的數據。 為此,我在適配器中編寫了此函數:
public void addData(Offer newOffer){
this.offerList.clear();
this.offerList.add(newOffer);
this.notifyDataSetChanged();
}
我現在的問題是,當我想在UI線程外部使用以下函數調用此函數時,該函數不在OffersActivity中,它不起作用:
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
final String message = new String(body, "UTF-8");
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
OffersActivity.offerAdapter.addData(new Offer("test", message));
}
});
}
適配器是OffersActivity中的公共靜態變量。 有沒有人知道為什么這不起作用?
布魯諾
您不能從原始UI線程以外的任何線程運行notifyDataSetChanged()
。 做這個
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
this.runOnUiThread(new Runnable() {
@Override
public void run() {
OffersActivity.offerAdapter.addData(new Offer("test", message));
}
});
}
});
首先,您的方法應該是名稱updateData
而不是addData
因為它不會添加任何內容,只能用新的數據替換舊數據。
然后嘗試(假設您的handleDelivery
方法在您的Activity中):
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// NON static variable
OffersActivity.this.offerAdapter.addData(new Offer("test", message));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.