Java 试图根据选择单选按钮保存单选组的状态

Java 试图根据选择单选按钮保存单选组的状态,java,android,Java,Android,我正在做一个项目,我在几个广播组中有许多单选按钮。我想做的是根据第一个无线电组中的特定按钮保存所有无线电组的配置。例如,第一个单选组称为select,我有4个不同的select单选按钮。当我从该组内的4个按钮切换时,我希望其他单选组按钮自动填充到以前的按钮,我还希望在切换到单选组时保存当前按钮的配置。例如,如果第一个单选组中的一个单选按钮被切换,它会记住前一个单选组的配置,并在返回到该视图时自动重新加载它自己。创建一个模型,对所有这些进行建模。使用属性更改侦听器(或许多其他侦听器)可以侦听状态中

我正在做一个项目,我在几个广播组中有许多单选按钮。我想做的是根据第一个无线电组中的特定按钮保存所有无线电组的配置。例如,第一个单选组称为select,我有4个不同的select单选按钮。当我从该组内的4个按钮切换时,我希望其他单选组按钮自动填充到以前的按钮,我还希望在切换到单选组时保存当前按钮的配置。例如,如果第一个单选组中的一个单选按钮被切换,它会记住前一个单选组的配置,并在返回到该视图时自动重新加载它自己。

创建一个模型,对所有这些进行建模。使用属性更改侦听器(或许多其他侦听器)可以侦听状态中的更新。无论何时调用模型上的setter,状态都将更新

例如,当您将外部单选按钮组设置为第二个按钮时,模型可以为依赖于该状态的所有按钮引发属性更改事件。内部单选按钮状态的getter可以取决于外部按钮的状态

public class Model {
    private int outerSelected = 0; // 0 or 1
    private InnerModel[] innerModels = new InnerModel[2];

    private class InnerModel {
        private int selected = 0; // 0, 1, or 2

        public void setSelected(int selected) {
            this.selected = selected;
            // Send event
        }

        public int getSelected() {
            return selected;
        }
    }

    public int getSelectedInnerModel() {
        return innerModels[outerSelected];
    }

    public int setOuterSelected(int outerSelected) {
        this.outerSelected = outerSelected;
        // send event for selectedInnerModel change
        // If you use beans binding, this should cause the view to re-query the 
        // getSelected on the InnerModel as well
    }
}
您可能需要在视图中添加侦听器,以侦听按钮上的用户操作。这些侦听器中的操作将调用模型上的setter。注意不要以这种方式导致递归事件

例如:

这是您可以构建的模型的一个示例。假设您有一个带有2个按钮的外部单选按钮组和一个带有3个按钮的内部按钮组。无论选定的外部按钮如何,内部组选项始终相同

public class Model {
    private int outerSelected = 0; // 0 or 1
    private InnerModel[] innerModels = new InnerModel[2];

    private class InnerModel {
        private int selected = 0; // 0, 1, or 2

        public void setSelected(int selected) {
            this.selected = selected;
            // Send event
        }

        public int getSelected() {
            return selected;
        }
    }

    public int getSelectedInnerModel() {
        return innerModels[outerSelected];
    }

    public int setOuterSelected(int outerSelected) {
        this.outerSelected = outerSelected;
        // send event for selectedInnerModel change
        // If you use beans binding, this should cause the view to re-query the 
        // getSelected on the InnerModel as well
    }
}

我不建议你实际使用整数。枚举是个更好的主意,但我没有写出来。或者,您可以将此模型类设置为视图中的私有类。

创建一个模型,对所有这些进行建模。使用属性更改侦听器(或许多其他侦听器)可以侦听状态中的更新。无论何时调用模型上的setter,状态都将更新

例如,当您将外部单选按钮组设置为第二个按钮时,模型可以为依赖于该状态的所有按钮引发属性更改事件。内部单选按钮状态的getter可以取决于外部按钮的状态

public class Model {
    private int outerSelected = 0; // 0 or 1
    private InnerModel[] innerModels = new InnerModel[2];

    private class InnerModel {
        private int selected = 0; // 0, 1, or 2

        public void setSelected(int selected) {
            this.selected = selected;
            // Send event
        }

        public int getSelected() {
            return selected;
        }
    }

    public int getSelectedInnerModel() {
        return innerModels[outerSelected];
    }

    public int setOuterSelected(int outerSelected) {
        this.outerSelected = outerSelected;
        // send event for selectedInnerModel change
        // If you use beans binding, this should cause the view to re-query the 
        // getSelected on the InnerModel as well
    }
}
您可能需要在视图中添加侦听器,以侦听按钮上的用户操作。这些侦听器中的操作将调用模型上的setter。注意不要以这种方式导致递归事件

例如:

这是您可以构建的模型的一个示例。假设您有一个带有2个按钮的外部单选按钮组和一个带有3个按钮的内部按钮组。无论选定的外部按钮如何,内部组选项始终相同

public class Model {
    private int outerSelected = 0; // 0 or 1
    private InnerModel[] innerModels = new InnerModel[2];

    private class InnerModel {
        private int selected = 0; // 0, 1, or 2

        public void setSelected(int selected) {
            this.selected = selected;
            // Send event
        }

        public int getSelected() {
            return selected;
        }
    }

    public int getSelectedInnerModel() {
        return innerModels[outerSelected];
    }

    public int setOuterSelected(int outerSelected) {
        this.outerSelected = outerSelected;
        // send event for selectedInnerModel change
        // If you use beans binding, this should cause the view to re-query the 
        // getSelected on the InnerModel as well
    }
}

我不建议你实际使用整数。枚举是个更好的主意,但我没有写出来。或者,您可以在视图中将此模型类设置为私有。

谢谢您的回复。到目前为止,我所做的是,我有一个OnCheckedChangeListener,它监听主广播组中选择的按钮。激活时,它将枚举函数设置为第一个、第二个、第三个或第四个。然后我所做的就是收听其他广播组的变化。当在其他单选组中单击单选按钮时,我将状态保存为临时布尔值,然后是一个switch语句,该语句根据枚举切换视图。在这种情况下,我调用了一个基于枚举的单选组保存函数。然后我有一个加载函数,它将按钮的状态设置为临时存储的状态。这个方法似乎可以工作,但有缺陷,而且并不是所有的设置都能被准确地保存和加载。关键是IMO需要有一个单独的类来模拟所有按钮的状态。我将编辑一个小例子。谢谢你的回复。到目前为止,我所做的是,我有一个OnCheckedChangeListener,它监听主广播组中选择的按钮。激活时,它将枚举函数设置为第一个、第二个、第三个或第四个。然后我所做的就是收听其他广播组的变化。当在其他单选组中单击单选按钮时,我将状态保存为临时布尔值,然后是一个switch语句,该语句根据枚举切换视图。在这种情况下,我调用了一个基于枚举的单选组保存函数。然后我有一个加载函数,它将按钮的状态设置为临时存储的状态。这个方法似乎可以工作,但有缺陷,而且并不是所有的设置都能被准确地保存和加载。关键是IMO需要有一个单独的类来模拟所有按钮的状态。我将编辑一个小例子。