Background -这是一个场景,我的应用程序是一个物联网应用程序.现在的情况是我必须在房间部分创建一组物联网设备.但条件总是相同类型的设备必须在该组中 Select ,如果在房间里有4个设备,其中2支持RGB和其他支持温暖和冷白色,然后该组时,我会创建它将显示所有设备与复选框与不同的类别.如果我在任何设备上打勾,那么其他设备类别将被禁用(不是同一个).因为我想让用户创建相同类别的组.

Problem-现在,正如我提到的问题,如果我不在小组中做出任何改变,它也无法挽救它.

private fun createSelectedDevices() {
        val selectedNodes = JsonArray()
        val disSelectedNodes = JsonArray()
        val distinctDevices = devices.distinctBy { it.nodeId } as ArrayList<Device>

        if (selectedDevices.isNullOrEmpty()) {
            //Error happening when we edit the Group Name or not
            alertErrorManagement(
                "Please select devices",
                "",
                ErrorObject.EXCEPTION,
                R.drawable.ic_error_background
            )
            return
        } else {
            for (device in selectedDevices) {
                if (device.selectedState == 1) {
                    selectedNodes.add(device.nodeId)
                } else {
                    disSelectedNodes.add(device.nodeId)
                }
            }

            if (selectedNodes.isEmpty && disSelectedNodes.isEmpty) {
                alertErrorManagement(
                    "Please select devices",
                    "",
                    ErrorObject.EXCEPTION,
                    R.drawable.ic_error_background
                )
                return
            }
        }

        if (!disSelectedNodes.isEmpty) {
            updateGroupRemove(disSelectedNodes, selectedNodes)
        } else {
            updateGroupAdd(selectedNodes)
        }

    }

现在在这段代码alertErrorManagement是一个弹出消息,将显示当用户没有 Select 任何设备(而编辑组我给用户的权限来更改它的组名太).现在假设您创建了一个包含1个设备的组.如果您try 单击组中的编辑按钮,而不更改组名称或设备 Select 等任何内容,则直接单击保存按钮.它将显示弹出消息Please Select Devices,这是错误的,因为已经 Select 了1个 node 或设备.在代码中,它提到了上面的if-condition.但如果我 Select 相同的设备并取消勾选复选框.之后,如果我点击同一设备并勾选复选框.它将显示Group Updated Successfully的弹出消息.

我try 查看SelectedDevice.kt类文件,但没有看到任何错误.

public class SelectiveDevice implements Serializable {

    private String nodeId;
    private String deviceName;
    private String userVisibleName;
    private String deviceType;
    private String primaryParamName;
    private ArrayList<Param> params;
    private boolean expanded;
    private int selectedState;

    public boolean isBluetooth = false;

    public boolean selected = false;

    private String type = "";

    public SelectiveDevice() {
    }

    public SelectiveDevice(SelectiveDevice device) {

        nodeId = device.getNodeId();
        deviceName = device.getDeviceName();
        userVisibleName = device.getUserVisibleName();
        deviceType = device.getDeviceType();
        primaryParamName = device.getPrimaryParamName();
        params = device.getParams();
        expanded = device.isExpanded();
        selectedState = device.getSelectedState();
    }

    public SelectiveDevice(SelectiveDevice device, boolean selected, String type) {

        nodeId = device.getNodeId();
        deviceName = device.getDeviceName();
        userVisibleName = device.getUserVisibleName();
        deviceType = device.getDeviceType();
        primaryParamName = device.getPrimaryParamName();
        params = device.getParams();
        expanded = device.isExpanded();
        selectedState = device.getSelectedState();
        this.selected = selected;
        this.type = type;
    }

    public SelectiveDevice(Device device, boolean selected, String type) {

        nodeId = device.getNodeId();
        deviceName = device.getDeviceName();
        userVisibleName = device.getUserVisibleName();
        deviceType = device.getDeviceType();
        primaryParamName = device.getPrimaryParamName();
        params = device.getParams();
        expanded = device.isExpanded();
        selectedState = device.getSelectedState();
        this.selected = selected;
        this.type = type;
    }

    public SelectiveDevice(String id) {
        nodeId = id;
    }

    public String getNodeId() {
        return nodeId;
    }

    public String getDeviceName() {
        return deviceName;
    }

    public void setDeviceName(String deviceName) {
        this.deviceName = deviceName;
    }

    public String getUserVisibleName() {
        return userVisibleName;
    }

    public void setUserVisibleName(String userVisibleName) {
        this.userVisibleName = userVisibleName;
    }

    public String getDeviceType() {
        return deviceType;
    }

    public void setDeviceType(String deviceType) {
        this.deviceType = deviceType;
    }

    public String getPrimaryParamName() {
        return primaryParamName;
    }

    public void setPrimaryParamName(String primaryParamName) {
        this.primaryParamName = primaryParamName;
    }

    public ArrayList<Param> getParams() {
        return params;
    }

    public void setParams(ArrayList<Param> params) {
        this.params = params;
    }

    public int getSelectedState() {
        return selectedState;
    }

    public void setSelectedState(int selectedState) {
        this.selectedState = selectedState;
    }

    @Override
    public String toString() {
        return "EspDevice {" +
                "node id = '" + nodeId + '\'' +
                "name = '" + deviceName + '\'' +
                ", type ='" + deviceType + '\'' +
                '}';
    }

    public void setExpanded(boolean expanded) {
        this.expanded = expanded;
    }

    public boolean isExpanded() {
        return expanded;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public void setSelected(boolean selected) {
        this.selected = selected;
    }

    public boolean isSelected() {
        return selected;
    }

}

作为一名Android新手,我不太清楚我应该go 哪里看.

推荐答案

I have made some modifications inside your 100 function:

private fun createSelectedDevices() {
    val selectedNodes = JsonArray()
    val disSelectedNodes = JsonArray()
    val distinctDevices = devices.distinctBy { it.nodeId } as ArrayList<SelectiveDevice>

    var changesMade = false  // Flag to track if any changes have been made

    for (device in selectedDevices) {
        if (device.selectedState == 1) {
            selectedNodes.add(device.nodeId)
        } else {
            disSelectedNodes.add(device.nodeId)
        }
        if (device.selectedState != device.getSelectedState()) {
            // Changes have been made
            changesMade = true
        }
    }

    if (!changesMade) {
        // No changes made, consider it a successful operation
        // You can return or handle this case as needed
        return
    }

    if (selectedNodes.isEmpty() && disSelectedNodes.isEmpty()) {
        alertErrorManagement(
            "Please select devices",
            "",
            ErrorObject.EXCEPTION,
            R.drawable.ic_error_background
        )
        return
    }

    if (!disSelectedNodes.isEmpty()) {
        updateGroupRemove(disSelectedNodes, selectedNodes)
    } else {
        updateGroupAdd(selectedNodes)
    }
}

Android相关问答推荐

在编写中强制软键盘呈现

更新画布上的绘图以具有水平填充

编写Inbox需要具有匹配兼容性的Kotlin版本

使用不同的Google帐户登录

以编程方式更改Android应用程序上的文件许可

fillMaxHeight中的分数在列内不起作用(android jetpack compose)

泛型类型lambda函数参数作为函数参数

如何在 compose 中使用可变对象?

无法插入 LayoutNode@cc72396 子级,因为它已有父级

在本地通知中设置自定义声音

我可以从 Android 中的选定文本中获取周围的文本吗?

我的自定义小吃店不适合我的全宽屏幕尺寸

如何从包装在泛型中的 retrofit 调用中检索密钥?

如何在 JetpackCompose 的 LazyColumn 中 Select 多个项目

Jetpack Compose - 每次点击按钮都不起作用

删除项目时延迟列不更新

Android Jetpack Compose - 每次文本字段值更改时,可组合函数都会重新组合

Delphi 11:以编程方式查找 MSBuild 的正确工具版本

使用 Jetpack Compose 的深层链接导航到可组合项

使用 Android 字符串数组在 Room 中迁移