1. 程式人生 > >Android開發學習筆記:為動態新增的EditText控制元件繫結值改變監聽事件

Android開發學習筆記:為動態新增的EditText控制元件繫結值改變監聽事件

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);