簡體   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