迭代EditText对象

时间:2015-09-16 20:21:02

标签: java android iterator

我注意到了一些冗余代码,我认为这是我可以使用迭代的情况。我想出了这个解决方案并通过电子邮件发送给了我的教授。

他回答说:

对于此示例,虽然解决方案以有限的方式工作,但您需要更多结构才能正确执行您要执行的操作。您可以做的是创建一个需要重置方法的接口,让所有控件实现此接口并提供重置方法,循环控制作为接口类型的集合,并调用重置。

确定。这种做法很有道理。我知道如何使用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("");
          }
      }
}

1 个答案:

答案 0 :(得分:0)

我不明白为什么你的教授告诉实现重置方法的接口,默认情况下EditText具有重置功能。<​​/ p>

mEditText.getText().clear()

以上行将清除EditText的文字。据我所知,从上面的代码中,您正在尝试在单击按钮时清除表单(所有EditText s)。我能想到的最简单的方法是将整个表单分组到一个ViewGroup中(如果尚未完成)。它可以是RelativeLayoutLinearLayout,也可以称之为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();
        }
    }
}