问题:我可以在儿童活动中一遍又一遍地重复使用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);
这很好....第一次显示子活动。第二次显示我得到一个例外。 总之,这是一系列事件:
我可以避免这个问题,如果我将类归零并重新构建它。但是,我想重新展示第一次观看时所做的选择。
思路:
P.S。您可能会问我为什么不使用XML。首先,我将拥有100多个这样的单选按钮,我认为通过XML进行管理会非常痛苦。另一方面,我只是喜欢以编程方式处理这些事情。
答案 0 :(得分:0)
确保从所有radiogroup中删除所有radiobuttons。基本上你的权利是radiobuttons正在保存指向不存在的raidogroups的指针,并且没有没有办法在没有调用所有radiogroups上的removeAllViews的情况下重新分配。如果您确定要调用它,最好的地方就是onDestroy。