From cb99bd7dad1b305a434c5c6c99ca65e782eb0f34 Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期五, 11 四月 2025 17:32:12 +0800 Subject: [PATCH] add: 消息提醒 --- app/src/main/java/com/example/firstapp/activity/ReminderListActivity.kt | 89 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 88 insertions(+), 1 deletions(-) diff --git a/app/src/main/java/com/example/firstapp/activity/ReminderListActivity.kt b/app/src/main/java/com/example/firstapp/activity/ReminderListActivity.kt index a9b35d4..44a6c76 100644 --- a/app/src/main/java/com/example/firstapp/activity/ReminderListActivity.kt +++ b/app/src/main/java/com/example/firstapp/activity/ReminderListActivity.kt @@ -11,11 +11,19 @@ import com.example.firstapp.databinding.ActivityReminderListBinding import com.example.firstapp.ui.dashboard.ReminderRecordViewModel import kotlinx.coroutines.launch +import android.widget.Toast +import android.view.ViewGroup +import android.widget.FrameLayout +import android.widget.TextView +import android.graphics.Color +import android.view.Gravity +import android.util.TypedValue class ReminderListActivity : AppCompatActivity() { private lateinit var binding: ActivityReminderListBinding private lateinit var viewModel: ReminderRecordViewModel private lateinit var adapter: ReminderRecordAdapter + private var unreadBadge: TextView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -26,7 +34,40 @@ setupRecyclerView() setupClickListeners() +// setupUnreadBadge() 消息列表页面不使用小红点 observeRecords() + + // 检查未读消息数量 + checkUnreadMessages() + } + + private fun setupUnreadBadge() { + // 创建未读消息数量的小红点 + unreadBadge = TextView(this).apply { + setBackgroundResource(android.R.color.holo_red_light) + setTextColor(Color.WHITE) + gravity = Gravity.CENTER + textSize = 10f + setPadding(8, 2, 8, 2) + + // 设置圆角背景 + val outValue = TypedValue() + context.theme.resolveAttribute( + android.R.attr.selectableItemBackgroundBorderless, outValue, true + ) + setBackgroundResource(outValue.resourceId) + setBackgroundColor(Color.RED) + } + + // 添加到布局中 + (binding.clearReadMessagesButton.parent as ViewGroup).addView(unreadBadge) + + // 调整位置到已读按钮右上角 + (unreadBadge?.layoutParams as? FrameLayout.LayoutParams)?.apply { + gravity = Gravity.TOP or Gravity.END + topMargin = 8 + rightMargin = 8 + } } private fun setupRecyclerView() { @@ -34,6 +75,7 @@ // 点击提醒记录时,标记为已读 lifecycleScope.launch { viewModel.updateRecordStatus(record.id, ReminderRecord.STATUS_READ) + checkUnreadMessages() } } binding.reminderRecyclerView.apply { @@ -46,11 +88,56 @@ binding.addReminderButton.setOnClickListener { startActivity(Intent(this, ReminderSettingsActivity::class.java)) } - } + // 添加已读按钮点击事件 + binding.clearReadMessagesButton.setOnClickListener { + lifecycleScope.launch { + // 将所有未读消息标记为已读 + adapter.currentList.forEach { record -> + if (record.status == ReminderRecord.STATUS_UNREAD) { + viewModel.updateRecordStatus(record.id, ReminderRecord.STATUS_READ) + } + } + Toast.makeText( + this@ReminderListActivity, "所有消息已标记为已读", Toast.LENGTH_SHORT + ).show() + checkUnreadMessages() + } + } + } + // 观察提醒记录列表 private fun observeRecords() { viewModel.reminderRecords.observe(this) { records -> adapter.submitList(records) + checkUnreadMessages() } } + + private fun checkUnreadMessages() { + lifecycleScope.launch { + val unreadCount = viewModel.getUnreadCount() + + // 更新未读消息数量徽章 + if (unreadCount > 0) { + unreadBadge?.apply { + text = if (unreadCount > 99) "99+" else unreadCount.toString() + visibility = android.view.View.VISIBLE + } + } else { + unreadBadge?.visibility = android.view.View.GONE + } + } + } + + override fun onResume() { + super.onResume() + // 每次恢复活动时检查未读消息 + checkUnreadMessages() + } + + override fun onPause() { + super.onPause() + // 发送广播通知HomeFragment更新未读提醒数量 + sendBroadcast(Intent("com.example.firstapp.REMINDER_UPDATED")) + } } \ No newline at end of file -- Gitblit v1.9.3