2012-07-01 139 views
0

當我在後臺調用addAdapter()幾次時,有時會得到一些重複的消息。例如當我打電話addAdapter(項目1,項目2,項目3 ......),它打印項目1,項目2,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; 
     } 

    } 
}; 

回答

1

,這並不奇怪。每次調用sendEmptyMessage()時,都會向該線程的消息隊列添加消息。您不會將項目添加到隊列中,只需向Handler發送一條消息即可訪問Handler處理消息時的值currentAddItem。它沒有看到您發送消息時的價值。所以你很可能會看到跳過的項目和重複的項目。

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; 
     } 
    } 
};