0

我正在开发一个允许用户填写表格的 android 项目。

下图描述了我对表单的不同布局。 这是我的表格

黑色布局(LinearMain)是我的主要线性布局。绿色的(LinearForm)描述了表格的行。

LinearMain.addView(LinearForm);

蓝色的 (LinearDescription) 包含要填写的表格行的描述。

LinearForm.addView(LinearDescription);

灰色的线性布局描述了我的控件。控件可以是 EditText、按钮或 CheckBox。

例如 LinearForm.addView(LinearButton)

填写表格后,我想检索 EditText 中的文本,知道 CheckBox 是否被选中。我已经尝试使用 ArrayList(示例 ArrayList),但它不是很有帮助。

还有其他方法可以解决这个问题吗?

4

4 回答 4

2

因为您不确切知道要处理的视图,所以在这里使用实例来避免异常很重要

ViewGroup是一个扩展所有 ViewGroup 的抽象类,例如 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
}
于 2013-03-11T11:23:10.190 回答
1

ViewGroup.getChildAt(int)记录在这里

您可以创建一个 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();
    }
}
于 2013-03-11T11:15:14.257 回答
1

您可以将 id 设置为您的视图,不管它是什么视图:LinearButton.setId(); 然后通过using findViewById(R.id.chosenId).getText().toString(); forEditTextfindViewById(R.id.chosenId).isChecked();for获取文本CheckBox

另一种方法是将您的视图保存在视图的arrayList 中并使用此数组访问它们。

于 2013-03-11T11:15:47.027 回答
0

您是否在其中创建了布局xml并设置了每个视图的 id?如果是,那么你只需要创建EditTextusing的对象,findViewById(R.id.edittext)然后使用getText()的方法EditTextEditText. 并且CheckBox您可以使用findViewById(R.id.chosenId).isChecked().

于 2013-03-11T11:30:04.583 回答