2013-09-27 69 views
0

我想根據條件動態創建EditTextFields。條件是,如果我開始在第一個EditTextField上打字,它將在底部創建一個EditTextField,並在第二個時候創建​​第三個EditTextField。同樣,如果上EditTextField中沒有文本,我想刪除底部文本。謝謝。在EditText上輸入時在視圖中添加EditText字段

+2

你只會有3個EDITTEXT領域?如果是這樣,我會在視圖中創建它們,並在文本位於其他editText字段時顯示/隱藏。你有一些代碼嗎?你有什麼嘗試? – jasonflaherty

+0

我同意顯示/隱藏方法可能是最簡單的,如果你有一個具體數量的最大的領域之前已知的領域。 – nhgrif

+0

否3 editText字段。動態地,我們應該添加任意數量的editText字段。 – user2760685

回答

2

使用父視圖,如ScrollView,您知道您可以添加靈活的內容。然後使用TextWatcher a/k/a a text change listener。然後,您可以創建一個新的文本視圖,如果將文本輸入EditText字段中,您將添加到ScrollView

爲了整潔,我可能會創建一個自定義的TextView類,它包含這個文本更改偵聽器和複製檢查。這裏的例子,你如何可以添加一個TextView

//instance variable 
private LinearLayout containerLayout; 
private newTextViewCreated = false; 
//initialize your conatinerLayout before you use it 
//and create your first edit text field 
public void onCreate(Bundle savedInstaceState){ 
    containerLayout = (LinearLayout)findViewById(R.id.conatinerLinearLayout); 
    createEditText(); 
} 

private void createEditText(){ 
    EditText editText = new editText(this); 
    editText.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if(count > 0 && !newTextViewCreated){ 
       createEditText(); 
       newTextViewCreated = true; 
      }   
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub    
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      //TODO Auto-generated method stub 
     } 
    }); 
    containerLayout.addView(editText); 
} 

我沒有測試了這一點,現在我正在寫,但這裏是我在想什麼。請閱讀TextWatcher如何工作的說明,以便了解內部方法。你將不得不使用條件語句,但是你在做什麼是監聽輸入字符數量的變化,然後在向每個文本視圖添加字符時進行遞歸調用以創建額外的視圖。我使用布爾標誌來顯示視圖何時被創建,所以每次改變字符時我們都不會添加一個。根據您的評論,我移出了createEditText方法。如果你自己創建了EditText課程,你可以添加一個方法來設置/獲取這個TextView是否跨越另一個的狀態。要刪除你只需添加一個刪除條件,將刪除線性佈局的視圖。

+0

但是如何動態添加和刪除EditText字段。 – user2760685

+0

您將使用'TextWatcher'。它會告訴你一切你需要知道的EditText中的內容。我將在上面添加一個示例。 – Rarw

+0

在內部類中使用非最終變量是不可能的。 – user2760685

0

顯示/隱藏他們在您的佈局,如果你知道需要EDITTEXT領域的總金額或編程添加它們像這樣:

EditText myET = new EditText(MyActivity.this); 
myET.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT)); 
LayoutContentView.addView(myET); 

然後檢查:

if (myET.getText().toString().trim().equals("")) 
{ 
    //Don't Show 
}else{ 
    //SHOW 
} 

SO問題可以幫助: https://stackoverflow.com/a/6792359/350421

EditText toAdd = new EditText(this); 
list.add(toAdd); 
+0

號動態地,我們應該添加任意數量的editText字段。 – user2760685

+0

這將有助於:http://stackoverflow.com/a/6792359/350421 – jasonflaherty

0

用戶TextWatcher 與TextWatcher實現您的活動,並重寫方法

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) {} 
+0

是的,我試過在onTextChanged。但是如何動態添加和刪除EditText字段。 – user2760685

相關問題