首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 動態添加 EditText 獲取輸入內容:TextWatcher 監聽與 View 容器遍歷

     編輯:程式設計綜合問答

動態 `addView(EditText)` 後,獲取所有輸入值有兩種主流方式:

方式一:實時監聽 (適合即時驗證/保存)

EditText et = new EditText(this);
et.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) {
        // s 即為當前輸入文本,可即時保存到數據模型
        model.setInput(et.getId(), s.toString());
    }
    @Override public void afterTextChanged(Editable s) {}
});
container.addView(et);
// 需為每個 EditText 設置唯一 ID: et.setId(View.generateViewId());

方式二:提交時遍歷容器 (適合表單整體提交)

List inputs = new ArrayList<>();
for (int i = 0; i < container.getChildCount(); i++) {
    View child = container.getChildAt(i);
    if (child instanceof EditText) {
        inputs.add(((EditText) child).getText().toString());
    }
}
// inputs 順序即添加順序

關鍵細節

  • 動態 View **必須設置 ID** (`View.generateViewId()` API 17+),否則 `findViewById`/`saveHierarchyState` 失效。
  • 若 `EditText` 在 `ScrollView`/`RecyclerView` 中,遍歷需遞歸查找或持有引用列表 `List`。
  • 內存洩漏防範:`TextWatcher` 持有 `Activity` 引用,`onDestroy` 時 `removeTextChangedListener` 或用弱引用封裝。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved