繁体   English   中英

listView更新不适用于静态变量

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM