开发待办类应用:如何将EditText存入数组并提取文本内容至数组?
嘿,针对你开发的这款多EditText待办应用,我给你梳理清楚怎么实现你要的两个功能,代码示例都给你写好了,直接就能用!
一、将所有EditText实例存入数组
这里分两种场景来处理,覆盖你可能遇到的情况:
场景1:布局里已经静态定义了多个EditText
如果你的LinearLayout里已经提前放好了若干EditText,最高效的方式是遍历LinearLayout的子View,筛选出所有EditText实例:
// 获取ScrollView内部的LinearLayout(替换成你自己的布局ID) LinearLayout linearLayout = findViewById(R.id.todo_container_ll); // 用List存储更灵活,后续转数组也方便 List<EditText> editTextList = new ArrayList<>(); // 遍历所有子View,筛选EditText for (int i = 0; i < linearLayout.getChildCount(); i++) { View childView = linearLayout.getChildAt(i); if (childView instanceof EditText) { editTextList.add((EditText) childView); } } // 如果需要转换成固定长度的数组(根据你的需求选择) EditText[] editTextArray = editTextList.toArray(new EditText[0]);
场景2:动态添加EditText(待办应用常用场景)
如果用户可以点击按钮新增待办输入框,推荐在创建EditText的时候直接加入数组,避免重复遍历布局,效率更高:
// 初始化EditText列表 List<EditText> editTextList = new ArrayList<>(); LinearLayout linearLayout = findViewById(R.id.todo_container_ll); Button addTodoBtn = findViewById(R.id.add_todo_btn); addTodoBtn.setOnClickListener(v -> { // 创建新的EditText EditText newTodoEt = new EditText(this); // 设置布局参数(根据你的UI需求调整) LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT ); params.setMargins(16, 16, 16, 16); // 单位是dp,需要转px的话可以写工具类 newTodoEt.setLayoutParams(params); newTodoEt.setHint("输入新的待办内容"); // 直接加入列表 editTextList.add(newTodoEt); // 添加到布局显示 linearLayout.addView(newTodoEt); });
二、将各EditText的文本内容存入数组
基于上面的EditText列表,我们可以快速提取所有文本内容,还能按需过滤空内容:
List<String> todoContentList = new ArrayList<>(); for (EditText et : editTextList) { String content = et.getText().toString().trim(); // 可选:过滤掉空的待办内容 if (!content.isEmpty()) { todoContentList.add(content); } } // 转换成字符串数组(按需选择) String[] todoContentArray = todoContentList.toArray(new String[0]);
额外补充:Kotlin版本代码(如果用Kotlin开发的话)
获取EditText列表:
val linearLayout = findViewById<LinearLayout>(R.id.todo_container_ll) val editTextList = mutableListOf<EditText>() for (i in 0 until linearLayout.childCount) { val child = linearLayout.getChildAt(i) if (child is EditText) { editTextList.add(child) } } val editTextArray = editTextList.toTypedArray()
提取文本内容:
val todoContentList = editTextList.mapNotNull { it.text.toString().trim().takeIf { content -> content.isNotEmpty() } } val todoContentArray = todoContentList.toTypedArray()
内容的提问来源于stack exchange,提问作者Ferg
相关产品推荐
相关产品推荐

