Android開發學習筆記:為動態新增的EditText控制元件繫結值改變監聽事件
阿新 • • 發佈:2019-02-11
LinearLayout LP=new LinearLayout(context); final EditText editText=new EditText(context); //editText.setHeight(47); editText.setId(i); Log.i("當前新增的文字框ID:",String.valueOf(editText.getId())); editText.setHint(R.string.txthint); editText.setBackgroundResource(R.drawable.table_shape2);//設定自定義樣式(使用的是drawable資料夾中的xml檔案) /*設定EditText元件值改變監聽事件*/ editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //Log.i("文字輸入框值改變事件:",s.toString()); } /** *值改變事件 * @param s 文字框輸入的值 * @param start 輸入的起始位置(索引) * @param before * @param count */ @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //從內部類中訪問本地變數editText; 需要被宣告為最終型別(用final修飾) int editTxtId= editText.getId(); LinearLayout editTextParent= (LinearLayout) editText.getParent();//獲取當前編輯的文字輸入框的父控制元件 /* * 獲取當前文字編輯框所在的行物件(由於文字編輯框外嵌套了一個LinearLayout控制元件 * 因此需要先獲取文字邊框的父控制元件)*/ TableRow tr= (TableRow) editTextParent.getParent(); Log.i("當前編輯行索引:",String.valueOf(tr.getId())); //設定第一列中CheckBox的狀態為選中狀態(注意佈局時CheckBox外層巢狀一個LinearLayout元件) ((CheckBox)((LinearLayout)tr.getChildAt(0)).getChildAt(0)).setChecked(true); } @Override public void afterTextChanged(Editable s) { // Log.i("文字輸入框值改變事件:",s.toString()); } }); LP.setBackgroundResource(R.drawable.table_shape); LP.addView(editText);