2015-09-16 262 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。這是一個線性佈局。謝謝。 –