[英]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.