gpt4 book ai didi

java - listView 更新不适用于静态变量

转载 作者:行者123 更新时间:2023-11-29 04:22:36 28 4
gpt4 key购买 nike

我有一个带有自定义适配器的 ListView。我想更新 ListView 的数据。为此,我在适配器中编写了这个函数:

public void addData(Offer newOffer){
this.offerList.clear();
this.offerList.add(newOffer);
this.notifyDataSetChanged();
}

我现在的问题是,当我想使用不在 OffersActivity 内部的以下函数在 UI 线程外部调用此函数时,它不起作用:

@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 中的公共(public)静态变量。有人知道为什么这不起作用吗?

布鲁诺

最佳答案

您不能从原始 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));
}
});

}
});

关于java - listView 更新不适用于静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48171164/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com