我有一个主要布局,其中包含一个LinearLayout。在这个LinearLayout中,我填充了多个包含表单和多个文本字段(3 EditText)的xml布局。
第一次尝试时,我只显示了一个表单。有一个添加表单的按钮。例如,如果用户点击“添加”按钮两次,则用户共有三个表单。我成功地获取了这三个表单的所有数据。
为此,我针对主布局“LinearLayout”,计算其子元素数量。计算完子元素数量后,我通过其位置调用主LinearLayout的子视图,然后获取EditText数据并保存到列表中。然后我将此列表移动到下一页。到目前为止,一切都正常。但是,如果用户返回上一页,则所有填充的布局都会消失。因此,我在恢复时计算列表大小,并设置用户上次编写的值。
问题是当我根据视图位置设置EditText的值时。所有填充的布局中都只显示最后一个对象(列表中的最后一个对象)的值。也就是说,当循环结束时,它会在所有布局中设置最后一个对象的值。这是我设置视图值的方法:
第一次尝试时,我只显示了一个表单。有一个添加表单的按钮。例如,如果用户点击“添加”按钮两次,则用户共有三个表单。我成功地获取了这三个表单的所有数据。
为此,我针对主布局“LinearLayout”,计算其子元素数量。计算完子元素数量后,我通过其位置调用主LinearLayout的子视图,然后获取EditText数据并保存到列表中。然后我将此列表移动到下一页。到目前为止,一切都正常。但是,如果用户返回上一页,则所有填充的布局都会消失。因此,我在恢复时计算列表大小,并设置用户上次编写的值。
问题是当我根据视图位置设置EditText的值时。所有填充的布局中都只显示最后一个对象(列表中的最后一个对象)的值。也就是说,当循环结束时,它会在所有布局中设置最后一个对象的值。这是我设置视图值的方法:
private void addFormDataOnResume(LinearLayout viewForm,Traveller otherTraveller)
{
EditText dateOfBirthEt = (EditText)viewForm.findViewById(R.id.dateOfBirth);
dateOfBirthEt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showDatePickerDialog(dateOfBirthEt);
}
});
dateOfBirthEt.setText(otherTraveller.getOtherDateOfBirth());
EditText firstNameET = (EditText)viewForm.findViewById(R.id.firstName);
firstNameET.setText(otherTraveller.getOtherFirstName());
EditText lastNameEt = (EditText)viewForm.findViewById(R.id.lastName);
lastNameEt.setText(otherTraveller.getOtherLastName());
}
我的循环代码:
int otherTraSize = otherTravellersData.size();
//adultsForms is the main linear layout in which I am adding views
for(k=0; k < otherTraSize; k++)
{
addFormOnResume();//Function for adding form layout
int viewPos = adultsForms.getChildCount();
if(viewPos>0)
{
addFormDataOnResume(adultsForms.getChildAt(viewPos-1), otherTravellersData.get(k));
}
}
我的添加表单功能:
private void addFormOnResume()
{
LinearLayout viewForm = (LinearLayout)layoutInflater.inflate(R.layout.other_traveller_form, null );
adultsForms.addView(viewForm);
}
我调试了我的代码,列表中的所有数据看起来都很好。对象按照正确的顺序具有正确的值。
请帮助我理解为什么只有最后一个对象的值被设置到所有充气的表单中。
非常感谢您的帮助......提前致谢。
addFormOnResume
,您是将表单布局添加到位置0或其他位置,而不是在末尾添加吗? - Amulya Khare