5.8 KiB
5.8 KiB
防抖功能使用指南
已创建的防抖工具类
已创建 DebounceClickListener.java,位于:
android-app/app/src/main/java/com/example/livestreaming/DebounceClickListener.java
使用方法
1. 基本用法(默认500ms防抖)
之前的代码:
button.setOnClickListener(v -> {
// 处理点击事件
doSomething();
});
修改后的代码:
button.setOnClickListener(new DebounceClickListener() {
@Override
public void onDebouncedClick(View v) {
// 处理点击事件
doSomething();
}
});
2. 自定义防抖时间
button.setOnClickListener(new DebounceClickListener(1000) { // 1秒防抖
@Override
public void onDebouncedClick(View v) {
doSomething();
}
});
已添加防抖的位置
WorkDetailActivity.java ✅
- 返回按钮 (backButton)
- 操作菜单按钮 (actionButton)
- 点赞按钮 (likeButtonContainer)
- 收藏按钮 (favoriteButtonContainer)
- 评论按钮 (commentButtonContainer)
- 描述文本点击 (descriptionText)
需要添加防抖的位置
高优先级(用户交互频繁的按钮)
MainActivity.java
- 菜单按钮 (menuButton) - 第312行
- 头像按钮 (avatarButton) - 第322行
- 通知图标 (notificationIcon) - 第335行
- 添加直播按钮 (fabAddLive) - 第429行
- 麦克风/搜索图标 (micIcon) - 第505行
- 创建直播间对话框确认按钮 - 第898行
- 复制推流地址按钮 (copyAddressBtn) - 第1053行
- 复制推流密钥按钮 (copyKeyBtn) - 第1058行
ConversationActivity.java
- 返回按钮 (backButton) - 第64行
- 发送按钮 (sendButton) - 第175行
EditProfileActivity.java
- 返回按钮 (backButton) - 第106行
- 取消按钮 (cancelButton) - 第107行
- 头像行点击 (avatarRow) - 第114行
- 头像预览点击 (avatarPreview) - 第117行
- 保存按钮 (saveButton) - 第145行
- 选择图片按钮 (pick) - 第308行
- 拍照按钮 (camera) - 第313行
- 取消按钮 (cancel) - 第321行
- 性别输入点击 (inputGender) - 第351行
- 位置输入点击 (inputLocation) - 第366行
- 位置确认按钮 (confirmButton) - 第438行
- 位置取消按钮 (cancelButton) - 第444行
- 生日输入点击 (inputBirthday) - 第466行
- 生日确认按钮 (confirmButton) - 第547行
- 生日取消按钮 (cancelButton) - 第572行
LoginActivity.java
- 登录按钮
- 注册跳转按钮
RegisterActivity.java
- 注册按钮
- 返回登录按钮
ProfileActivity.java
- 返回按钮
- 编辑资料按钮
- 关注/取消关注按钮
- 作品点击
PublishWorkActivity.java
- 返回按钮
- 选择图片/视频按钮
- 发布按钮
SearchActivity.java
- 返回按钮
- 搜索按钮
- 搜索建议项点击
SettingsPageActivity.java
- 返回按钮
- 各个设置项点击
- 退出登录按钮
中优先级(列表项点击)
Adapter类
- ConversationsAdapter - 对话列表项点击
- ConversationMessagesAdapter - 消息项点击(图片、语音)
- CommentAdapter - 评论点赞按钮
- BadgesAdapter - 徽章项点击
- DrawerCardsAdapter - 抽屉卡片点击
- FriendsAdapter - 好友项点击
- NearbyUsersAdapter - 附近用户项点击
- NotificationsAdapter - 通知项点击
- RoomsAdapter - 直播间项点击
- UserWorksAdapter - 作品项点击
- WaterfallRoomsAdapter - 瀑布流直播间项点击
低优先级(不太需要防抖的场景)
- 对话框关闭按钮(用户不太会快速重复点击)
- 底部导航栏切换(系统已有防抖机制)
- 长按事件(不需要防抖)
批量替换建议
可以使用以下正则表达式进行批量查找替换:
查找:
\.setOnClickListener\(v -> \{
替换为:
.setOnClickListener(new DebounceClickListener() {
@Override
public void onDebouncedClick(View v) {
注意: 需要手动添加对应的结束括号 });
特殊情况处理
1. Lambda表达式单行
// 之前
button.setOnClickListener(v -> finish());
// 之后
button.setOnClickListener(new DebounceClickListener() {
@Override
public void onDebouncedClick(View v) {
finish();
}
});
2. 已有变量引用
// 之前
View.OnClickListener listener = v -> doSomething();
button.setOnClickListener(listener);
// 之后
View.OnClickListener listener = new DebounceClickListener() {
@Override
public void onDebouncedClick(View v) {
doSomething();
}
};
button.setOnClickListener(listener);
3. 在Adapter中使用
// 在ViewHolder的bind方法中
public void bind(Item item) {
itemView.setOnClickListener(new DebounceClickListener() {
@Override
public void onDebouncedClick(View v) {
if (onItemClickListener != null) {
onItemClickListener.onItemClick(item);
}
}
});
}
测试建议
添加防抖后,建议测试以下场景:
- 快速连续点击按钮,确认只触发一次
- 正常点击间隔(>500ms),确认每次都能触发
- 不同防抖时间的按钮,确认各自独立工作
- 列表滚动时点击,确认不会误触发
注意事项
- 不要对所有点击都添加防抖:某些场景(如音乐播放器的快进/快退)不适合防抖
- 防抖时间要合理:默认500ms适合大多数场景,但某些场景可能需要调整
- 保持一致性:同类型的操作使用相同的防抖时间
- 测试充分:添加防抖后要测试各种点击场景
进度追踪
- ✅ 已完成:WorkDetailActivity.java
- 🔄 进行中:其他Activity
- ⏳ 待处理:Adapter类
最后更新:2024-12-24