2016-11-18 63 views
-3

在我的應用程序中,當CheckBox沒有被選中時,我動態地創建一個EditText,並且我想獲取用戶在其中寫入的文本。問題是我不知道在哪裏寫getText()。toString()。我調試了這一點,我發現當創建EditText時,getText()。toString()立即執行,並且總是返回「」。我也嘗試了EditText中的focusChange,但沒有任何成功。任何幫助表示讚賞!從EditText中獲取文本,不用按鈕

 final EditText editText = new EditText(this); 
     TableRow.LayoutParams params = new TableRow.LayoutParams(getPx(100) , ViewGroup.LayoutParams.WRAP_CONTENT); 
     params.setMargins(0 ,0 ,getPx(100) ,0); 
     tr.addView(editText); 
     date = editText.getText().toString(); 
+0

使用'textWatcher' –

+0

我有太多嘗試這個。但是,當我在afterTextChanged中編寫代碼時,代碼在我只寫入一個數字時執行。我需要它在用戶寫入空洞日期時執行。 – Xantho

+0

你怎麼知道用戶是否寫完整日期?你如何確定它? –

回答

0

你有沒有嘗試過這樣的:

  editText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       if(isValidDate()) { 
        date = s.toString(); 
       } 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 

      } 
     }); 

    ... 

    private boolean isValidDate() { 
     // implement your logic here 
    } 
+0

是的,我做到了。但是當用戶只寫一個字符時,afterTextChanged中的代碼會被執行。我希望他寫一個日期,然後得到它 – Xantho

+0

如果字符串是有效的日期,你可以檢查onTextChanged。如果是,則更新變量。 – fsnasser

0

所以你不想當用戶輸入採取文本。

editText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

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

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
      String typedStringIs=s.toString(); 
      //Here your code . It is dynamaclly changing . if anything you write will be here 
      } 
     }); 
+0

所以這裏typedStringIs是用戶寫入的文本? – Xantho

+0

是的:但它不是一個好方法 – Godwin