我正在开发一个允许用户填写表单的android项目。
下图描述了表单的不同布局。
黑色布局(LinearMain)是我的主要线性布局。 绿色(LinearForm)描述表单的行。
LinearMain.addView(LinearForm);
蓝色的(LinearDescription)包含要填写的表格行的描述。
LinearForm.addView(LinearDescription);
灰色线性布局描述了我的控件。控件可以是EditText,按钮或CheckBox。
例如LinearForm.addView(LinearButton)
填写表单后,我想检索EditText中的文本,知道CheckBox是否已选中。 我已经尝试使用ArrayList(示例ArrayList)但它没有用处。
还有其他方法可以解决这个问题吗?
答案 0 :(得分:2)
因为您不完全了解视图,所以在此处使用实例以避免异常非常重要
ViewGroup
是一个扩展所有ViewGroups的抽象类,例如LinearLayout是一个ViewGroup。
if(ViewGroup.getChildAt(int) instanceof Checkbox){
//do sommethng here
}else if(ViewGroup.getChildAt(int) instanceof Button){
//do sommethng here
}else if(ViewGroup.getChildAt(int) instanceof TextView){
//do sommethng here
}else if(ViewGroup.getChildAt(int) instanceof EditText){
//do sommethng here
}
答案 1 :(得分:1)
ViewGroup.getChildAt(int)
已记录在案here
您可以创建一个for循环来浏览LinearLayout
的孩子,检查相应的孩子是否为instanceof CheckBox
并获得值((CheckBox) getChildAt(i)).isChecked()
示例代码:
LinearLayout ll;
for ( int i = 0; i < ll.getChildCount(); i++ ) {
View child = ll.getChildAt(i);
if ( child instanceof CheckBox ) {
boolean checked = ((CheckBox) child).isChecked();
}
}
答案 2 :(得分:1)
您可以为自己的视图设置ID,不要介意它的视图:LinearButton.setId();
然后通过using findViewById(R.id.chosenId).getText().toString();
获取文字
EditText
的{{1}}或findViewById(R.id.chosenId).isChecked();
的{{1}}。
另一种方法是将视图保存在视图的数组列表中,并使用此数组访问它们。
答案 3 :(得分:0)
您是否在xml
中创建了布局并设置了每个视图的ID?
如果是,那么您只需要使用EditText
创建findViewById(R.id.edittext)
的对象,然后使用getText()
的{{1}}方法从EditText
获取文本}。对于EditText
,您可以使用CheckBox
。