1

当我在后台多次调用 addAdapter() 时,有时我会收到一些重复的消息。例如,当我调用 addAdapter(item1, item2, item3...) 时,它会打印 item1, item2, item2...

ExaminationItem currentAddItem = null;


private void addAdapter(ExaminationItem item)
{
    currentAddItem = item;
    addhandler.sendEmptyMessage(1);
}

private Handler addhandler = new Handler() {
    @Override
    public void handleMessage(Message msg)
    {
        switch (msg.what) {
        case 1:
            if (currentAddItem != null) {
                _adapter.add(currentAddItem);
                Log.i(getClass().getName(), "---------------------------addhandler: currentAddItem._itemName = " + currentAddItem._itemName);
            }
            break;
        default:
            break;
        }

    }
};
4

2 回答 2

1

这并不奇怪。每次调用sendEmptyMessage()时,都会将消息添加到线程的消息队列中。您没有将您的项目添加到队列中,您只是向 Handler 发送一条消息,以访问 Handler 处理消息时的任何值currentAddItem。它看不到您发送消息时的值。因此,您可能会同时看到跳过的项目和重复的项目。

于 2012-07-01T10:37:42.220 回答
0
private void addAdapter(ExaminationItem item)
{
    Message message = addhandler.obtainMessage();
    message.what = 1;
    message.obj = item;
    addhandler.sendMessage(message);
}

private Handler addhandler = new Handler() {
    public void handleMessage(Message msg)
    {
        switch (msg.what) {
        case 1:
            if (msg.obj != null) {
                _adapter.add((ExaminationItem) msg.obj);
                examination_scanner_detail_tv.setText("detect to keep fit.");
                Log.i(getClass().getName(), "addhandler: msg.obj = " + msg.obj);
            }
            break;
        default:
            break;
        }
    }
};
于 2012-07-07T06:40:49.220 回答