我目前正在努力扩充我最终会添加到垂直LinearLayout容器的布局,作为更大的动态表单创建模块的一部分。
layout_checkbox.xml如下:
<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:text="sample text" />
<LinearLayout
android:id="@+id/checkboxGroup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<CheckBox
android:id="@+id/checkbox"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="sample" />
</LinearLayout>
现在我想做的就是抓住Checkbox(@+id/checkbox
)并创建它的副本,所有这些都在LinearLayout @+id/checkboxGroup
下。
layout = (LinearLayout) inflater.inflate(R.layout.layout_checkbox, container, false);
LinearLayout checkboxGroup = (LinearLayout) layout.findViewById(R.id.checkboxGroup);
CheckBox checkbox = (CheckBox) checkboxGroup.findViewById(R.id.checkbox);
// code that supposedly clones/duplicates checkbox.
我知道我可以轻松地从另一个xml定义中扩充Checkbox以创建它的多个实例,然后将它们添加到该组中。我尝试这样做的原因是因为我正在创建某种类型的库,并且我试图强制执行某种约定以使其更易于使用。
编辑:
这很有效,但很容易闻到性能:
layout = (LinearLayout) inflater.inflate(R.layout.layout_checkbox, container, false);
LinearLayout originalCheckboxGroup = (LinearLayout) layout.findViewById(R.id.checkboxGroup);
for (String entryItem : entry.fieldEntries) {
LinearLayout tempCheckboxLayout = (LinearLayout) inflater.inflate(R.layout.layout_checkbox, container, false);
LinearLayout checkboxGroup = (LinearLayout) tempCheckboxLayout.findViewById(R.id.checkboxGroup);
CheckBox checkbox = (CheckBox) checkboxGroup.findViewById(R.id.checkbox);
checkbox.setText(entryItem);
checkboxGroup.removeView(checkbox);
originalCheckboxGroup.addView(checkbox);
}
答案 0 :(得分:1)
what I want to do if possible is to get hold of the Checkbox (@+id/checkbox) and create copies of it
不,您不能复制/克隆视图,因为您将始终并且将对视图具有相同的引用,并且当一个更改全部将更改时,唯一的方法是每次如果您想要扩展视图使用相同的视图。
修改强>
无法克隆/复制复选框,但每次要使用复选框时都可以使视图(Linearlayout)膨胀。并使用膨胀的复选框。每次你打算使用/克隆一个复选框时都这样做。
答案 1 :(得分:1)
可能会为复选框
的文本添加一个列表 private LinearLayout checkboxGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
checkboxGroup = (LinearLayout) findViewById(R.id.checkboxGroup);
CheckBox checkbox = (CheckBox) checkboxGroup.findViewById(R.id.checkbox);
List<String> list = null; //set it
addCheckBox(checkbox, list);
}
private void addCheckBox(CheckBox checkbox, List<String> checkBoxTextList) {
for (int index = 0; index < checkBoxTextList.size(); index++) {
CheckBox checkboxClone = checkbox;
checkboxClone.setText(checkBoxTextList.get(index));
checkboxClone.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
}
});
checkboxGroup.addView(checkboxClone);
}
}