我注意到了一些冗余代码,我认为这是我可以使用迭代的情况。我想出了这个解决方案并通过电子邮件发送给了我的教授。
他回答说:
对于此示例,虽然解决方案以有限的方式工作,但您需要更多结构才能正确执行您要执行的操作。您可以做的是创建一个需要重置方法的接口,让所有控件实现此接口并提供重置方法,循环控制作为接口类型的集合,并调用重置。
确定。这种做法很有道理。我知道如何使用reset方法实现接口。但是,"让你的所有控件实现这个接口。循环控制"对我来说很困惑。是否有人能说明我如何实施这一策略?
此外,如果有一个更好的解决方案我会全神贯注。 THX!
public class MainAddressForm extends AppCompatActivity {
Button cmdOK;
Button cmdClear;
EditText editFirst;
EditText editLast;
EditText editAddress;
EditText editTown;
EditText editState;
EditText editZip;
String first, last, address, town, state, zip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_address_form);
}
public void onClick(View view) {
if (cmdOK.getId() == view.getId()) {
first = editFirst.getText().toString();
last = editLast.getText().toString();
address = editAddress.getText().toString();
town = editTown.getText().toString();
state = editState.getText().toString();
zip = editZip.getText().toString();
Toast.makeText(getApplicationContext(), "Hi " + first + " " + last + "" + address + " " + town + " " + state + " " + zip + ".", Toast.LENGTH_SHORT).show();
}
if (cmdClear.getId() == view.getId()) {
setTexts(editFirst, editLast, editAddress, editTown, editState, editZip);
}
}
public void setTexts( EditText first, EditText last, EditText address, EditText town, EditText state, EditText zip){
List<EditText> clearTextFields = new ArrayList<>();
Iterator<EditText> itr = clearTextFields.iterator();
clearTextFields.add(first);
clearTextFields.add(last);
clearTextFields.add(address);
clearTextFields.add(town);
clearTextFields.add(state);
clearTextFields.add(zip);
while(itr.hasNext()){
itr.next().setText("");
}
}
}
答案 0 :(得分:0)
我不明白为什么你的教授告诉实现重置方法的接口,默认情况下EditText
具有重置功能。</ p>
mEditText.getText().clear()
以上行将清除EditText
的文字。据我所知,从上面的代码中,您正在尝试在单击按钮时清除表单(所有EditText
s)。我能想到的最简单的方法是将整个表单分组到一个ViewGroup
中(如果尚未完成)。它可以是RelativeLayout
或LinearLayout
,也可以称之为form_layout
。然后要清除该表单中的所有EditText
,只需运行以下代码即可。
private void clearForm(ViewGroup formLayout) {
for (int i = 0; i < formLayout.getChildCount(); i++) {
View view = formLayout.getChildAt(i);
if (view instanceof EditText) {
((EditText) view).getText().clear();
}
}
}