重新使用Android中的单选按钮

时间:2011-11-12 04:04:39

标签: android

问题:我可以在儿童活动中一遍又一遍地重复使用RadioButton对象吗?

我有父活动和子活动。在子活动中,我在UI中显示了大量单选按钮。为了提供从父级到子级的数据绑定,我创建了一个包含RadioButtons集合的类(如下所示)。为了填充子活动,我将对此类的引用传递给子类,然后子组件将radioButtons分组到RadioGroups并显示它们。我这样做是因为现在每个按钮的已检查状态在父类中自动可用,而无需通过包传输任何数据。

public class GeneralAttribute{
    Activity  mThis;
    public class Gender {         // Mutually exclusive members
        String      categoryDesc  = "Gender of user";
        RadioButton isUnspecified = initRadioButton("Unspecified", true);
        RadioButton isMale        = initRadioButton("Male"       , false);
        RadioButton isFemale      = initRadioButton("Female"     , false);
    } ;
    <....more subclasses....>
    RadioButton initRadioButton(String str, Boolean b) {   // Factory
        float cLayoutWeight = 0.5f;
        RadioButton rb = new RadioButton(mThis);
        rb.setText   (str);
        rb.setChecked(b);
        rb.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, cLayoutWeight));
        return rb;
    }
    GeneralAttribute(Activity localThis){ // Constructor
        mThis = localThis;
        gender     = new Gender();
        handedness = new Handedness();
        location   = new Location();
    }
}

在父母活动中我有:

public class Parent(...)

   public GeneralAttribute mGeneralAttribute;              // Member class of RadioButtons
   public static SPIGestureLoggerActivity TopLevelActivity;// Reference to the parent activity

   public void onCreate(Bundle savedInstanceState) {
       TopLevelActivity = this;                            // Assign this to the reference
       mGeneralAttribute = new GeneralAttribute(this);     // Initialize the class of RBs
       startActivity(child);                               // Start the child

在儿童活动中我有这个:

    radiogroup = new RadioGroup(this);
    radiogroup.setOrientation(RadioGroup.VERTICAL);
    radiogroup.addView(Parent.TopLevelActivity.mGeneralAttribute.gender.isUnspecified);
    radiogroup.addView(Parent.TopLevelActivity.mGeneralAttribute.gender.isMale);
    radiogroup.addView(Parent.TopLevelActivity.mGeneralAttribute.gender.isFemale);
    Parent.TopLevelActivity.mGeneralAttribute.gender.isUnspecified.setChecked(true);
    mLinearLayout.addView(radiogroup);

这很好....第一次显示子活动。第二次显示我得到一个例外。 总之,这是一系列事件:

  • 创建RadioButtons类,
  • 将它们传给孩子,
  • 将它们添加到新的RadioGroup
  • 收集用户选择
  • 完成孩子的活动(应该销毁RadioGroups)
  • 使用父级中的数据
  • 再次启动子活动,
  • 尝试将RadioButtons添加到新的RadioGroups ... ...异常。

我可以避免这个问题,如果我将类归零并重新构建它。但是,我想重新展示第一次观看时所做的选择。

思路:

  • radioButtons是否会在第一次观看时保存指向不存在的RadioGroups的指针?
  • 有没有办法在班级的每个单选按钮上重新分配视图父级?

P.S。您可能会问我为什么不使用XML。首先,我将拥有100多个这样的单选按钮,我认为通过XML进行管理会非常痛苦。另一方面,我只是喜欢以编程方式处理这些事情。

1 个答案:

答案 0 :(得分:0)

确保从所有radiogroup中删除所有radiobuttons。基本上你的权利是radiobuttons正在保存指向不存在的raidogroups的指针,并且没有没有办法在没有调用所有radiogroups上的removeAllViews的情况下重新分配。如果您确定要调用它,最好的地方就是onDestroy。