修复消息重复显示的bug
authorCaisking <Casiking@zhihuishixun.com>
Fri, 16 Jan 2026 09:50:04 +0000 (17:50 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Fri, 16 Jan 2026 09:50:04 +0000 (17:50 +0800)
code/sdk/application/wearable/fd272/nativeapp/nativeui/message/include/MessageAdapter.h
code/sdk/application/wearable/fd272/nativeapp/nativeui/message/src/MessagePresenter.cpp
code/sdk/application/wearable/fd272/nativeapp/nativeui/message/src/MessageView.cpp

index daef831..9923a88 100644 (file)
@@ -42,6 +42,8 @@ namespace OHOS
 
         virtual void AddListItem(const MessageListItem &item);
 
+        void ClearListItem() { listData.clear(); }
+
         void SetItemClickListener(UIView::OnClickListener *itemclicklistener)
         {
             itemClickListener = itemclicklistener;
index 00dc9ce..9d84be2 100644 (file)
@@ -69,11 +69,9 @@ namespace OHOS
 
         if (model->GetPopupViewState())
         {
+            // 使用RefreshMessageList来刷新列表,它会先清空数据再添加,避免重复
             const MessageListItem *itemInfo = model->GetMessageListItems();
-            for (int i = 0; i < model->GetMessageCount(); i++)
-            {
-                view_->AddMessageToList(itemInfo[i]);
-            }
+            view_->RefreshMessageList(itemInfo);
         }
 
         RootView::GetInstance()->SetOnKeyActListener(this);
index d62767f..aabcba2 100644 (file)
  UIList *MessageView::GetList() { return MessageList; }
  
  
- void MessageView::RefreshMessageList(const MessageListItem *itemInfo) {
-   for (uint8_t i = 0; i < MessageModel::GetInstance().GetMessageCount();
-        i++) {
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
-                   "MessageView::RefreshMessageList itemInfo[i].itemName:%d", i);
-     AddMessageToList(itemInfo[i]);
-   }
-   MessageList->SetAdapter(p_MessageListAdapter);
-   MessageList->RefreshList();
- }
+void MessageView::RefreshMessageList(const MessageListItem *itemInfo) {
+  // 先清空列表数据,避免重复添加
+  if (p_MessageListAdapter != nullptr) {
+    p_MessageListAdapter->ClearListItem();
+  }
+  for (uint8_t i = 0; i < MessageModel::GetInstance().GetMessageCount();
+       i++) {
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                  "MessageView::RefreshMessageList itemInfo[i].itemName:%d", i);
+    AddMessageToList(itemInfo[i]);
+  }
+  MessageList->SetAdapter(p_MessageListAdapter);
+  MessageList->RefreshList();
+}
  } // namespace OHOS
\ No newline at end of file