2015-09-16 208 views
0

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

他回答说:

在这个例子中,虽然该解决方案以有限的方式工作,你需要更多的结构正确地做你正在尝试做的。你所能做的就是创建一个需要重置方法的接口,让所有控件实现这个接口并提供重置方法,通过控件作为接口类型的集合进行循环,然后调用重置。

好的。这种说法很有道理。我知道如何使用重置方法实现接口。然而,“让你的所有控件都实现这个接口......通过控件回放”令我感到困惑。任何人都可以阐明我如何实施这一战略?

此外,如果有更好的解决方案,我全部耳朵。谢谢!

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

我不明白为什么你的教授告诉落实复位方法,接口时EditText S按默认有一个复位功能。

mEditText.getText().clear() 

以上行将清除EditText的文字。据我所知,从上面的代码可以看出,当你点击一个按钮时,你正试图清除一个表单(所有的EditText)。我能想到的最简单的方法是,将整个表格分组在一个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(); 
     } 
    } 
} 
+1

这是完美的。我将编辑该问题以包含XML。这是一个线性布局。谢谢。 –