You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Java任务应用优先级筛选功能开发求助

Android任务应用优先级筛选实现方案

方案一:从Firebase Realtime Database直接查询过滤数据(推荐,适合大数据量场景)

这种方式直接在数据库层面过滤数据,减少本地内存占用,效率更高。

  1. 定义核心变量
    在MainActivity中声明以下变量:
private DatabaseReference userTasksRef;
private TaskCardAdapter taskAdapter;
private List<TaskModel> taskList = new ArrayList<>();
private int currentFilter = 0; // 0=全部任务, 1=高优先级, 2=中优先级, 3=低优先级
private String currentUserUid; // 当前登录用户的UID
  1. 初始化Firebase引用
    在onCreate方法中初始化用户任务节点的引用:
// 获取当前用户UID(需确保用户已登录)
currentUserUid = FirebaseAuth.getInstance().getCurrentUser().getUid();
// 指向当前用户的任务节点
userTasksRef = FirebaseDatabase.getInstance().getReference().child(currentUserUid);
  1. 绑定按钮点击事件
    给四个筛选按钮设置点击监听器,更新筛选状态并加载对应数据:
// All按钮
btnAll.setOnClickListener(v -> {
    currentFilter = 0;
    updateButtonStates();
    loadFilteredTasks();
});

// 高优先级按钮
btnHighPriority.setOnClickListener(v -> {
    currentFilter = 1;
    updateButtonStates();
    loadFilteredTasks();
});

// 中优先级按钮
btnMediumPriority.setOnClickListener(v -> {
    currentFilter = 2;
    updateButtonStates();
    loadFilteredTasks();
});

// 低优先级按钮
btnLowPriority.setOnClickListener(v -> {
    currentFilter = 3;
    updateButtonStates();
    loadFilteredTasks();
});
  1. 实现筛选数据加载方法
    根据当前筛选条件构建Firebase查询,加载对应任务:
private void loadFilteredTasks() {
    taskList.clear();
    Query taskQuery;

    if (currentFilter == 0) {
        // 加载全部任务,按优先级排序(可选)
        taskQuery = userTasksRef.orderByChild("priority");
    } else {
        // 加载指定优先级的任务
        taskQuery = userTasksRef.orderByChild("priority").equalTo(currentFilter);
    }

    taskQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            taskList.clear();
            for (DataSnapshot taskSnapshot : snapshot.getChildren()) {
                TaskModel task = taskSnapshot.getValue(TaskModel.class);
                if (task != null) {
                    taskList.add(task);
                }
            }
            taskAdapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            Toast.makeText(MainActivity.this, "任务加载失败: " + error.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
}
  1. 更新按钮选中状态(可选)
    给选中的按钮设置差异化样式,提升用户体验:
private void updateButtonStates() {
    int selectedColor = getResources().getColor(R.color.btn_selected);
    int defaultColor = getResources().getColor(R.color.btn_default);

    btnAll.setBackgroundColor(currentFilter == 0 ? selectedColor : defaultColor);
    btnHighPriority.setBackgroundColor(currentFilter == 1 ? selectedColor : defaultColor);
    btnMediumPriority.setBackgroundColor(currentFilter == 2 ? selectedColor : defaultColor);
    btnLowPriority.setBackgroundColor(currentFilter == 3 ? selectedColor : defaultColor);
}

方案二:本地过滤已加载的任务列表(适合小数据量场景)

如果已经预先加载了全部任务到本地列表,可以直接在内存中过滤,避免重复请求数据库。

  1. 预先加载全部任务
    在onCreate中先加载所有任务到本地列表:
private void loadAllTasks() {
    userTasksRef.orderByChild("priority").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            taskList.clear();
            for (DataSnapshot taskSnapshot : snapshot.getChildren()) {
                TaskModel task = taskSnapshot.getValue(TaskModel.class);
                if (task != null) {
                    taskList.add(task);
                }
            }
            taskAdapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            Toast.makeText(MainActivity.this, "任务加载失败: " + error.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
}
  1. 实现本地过滤方法
    点击按钮时对本地列表进行过滤,并更新Adapter:
private void filterTasks(int priority) {
    List<TaskModel> filteredList = new ArrayList<>();
    if (priority == 0) {
        filteredList.addAll(taskList);
    } else {
        for (TaskModel task : taskList) {
            if (task.getPriority() == priority) {
                filteredList.add(task);
            }
        }
    }
    taskAdapter.updateTaskList(filteredList);
}
  1. 修改Adapter添加更新列表方法
    在TaskCardAdapter中添加方法,用于更新显示的任务列表:
public void updateTaskList(List<TaskModel> newTaskList) {
    this.taskList = newTaskList;
    notifyDataSetChanged();
}
  1. 绑定按钮点击事件
    按钮点击时调用过滤方法并更新按钮状态:
btnHighPriority.setOnClickListener(v -> {
    currentFilter = 1;
    updateButtonStates();
    filterTasks(1);
});

// 其他按钮同理,对应传入0、2、3

注意事项

  • 确保TaskModel类的字段名与Firebase数据库中的字段完全一致,或使用@PropertyName注解映射字段名。
  • 配置Firebase Realtime Database规则,确保用户只能访问自己的任务数据:
{
  "rules": {
    "$uid": {
      ".read": "$uid === auth.uid",
      ".write": "$uid === auth.uid"
    }
  }
}

内容的提问来源于stack exchange,提问作者Divyanshu saraswat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:27:49