如何传递字符串值作为Java命令?Android动态显示EditText方法咨询
问题1:是否存在将字符串的值作为Java命令进行传递的方法?
Java没有原生语法支持直接将字符串作为Java代码命令执行,但可以通过以下几种方式实现类似效果:
- 反射机制:如果字符串对应类名、方法名或字段名,可通过反射API调用目标方法、访问字段或创建实例。
- Java ScriptEngine:借助
javax.script包中的ScriptEngine(比如Nashorn引擎),可以执行字符串形式的Java代码片段。 - 执行系统命令:如果字符串是系统级命令,可通过
Runtime.getRuntime().exec()或ProcessBuilder执行外部命令,但这不属于执行Java代码范畴。
问题2:根据整数值动态显示指定EditText控件
你的代码核心问题是试图对字符串对象调用setVisibility方法,这是无效的——字符串不是EditText控件实例。以下是两种可行的实现方案:
方案1:使用数组存储控件(推荐)
将所有EditText控件存入数组,通过遍历数组实现批量操作,代码简洁且性能稳定:
// 在类中定义数组,初始化时填充控件 private EditText[] editTextList; // 在Activity的onCreate或Fragment的onViewCreated中初始化数组 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); // 假设L1-L10已经通过findViewById绑定到变量 editTextList = new EditText[]{L1, L2, L3, L4, L5, L6, L7, L8, L9, L10}; } public void displaydynamicdata(int count) { // 先将所有控件设为隐藏(按需选择,若初始已隐藏可省略) for (EditText et : editTextList) { et.setVisibility(View.GONE); } // 显示前count个控件,同时避免数组越界 for (int i = 0; i < count && i < editTextList.length; i++) { editTextList[i].setVisibility(View.VISIBLE); } }
方案2:使用反射(不推荐)
若不想维护数组,可通过反射获取控件实例,但反射性能较差且易因字段名错误引发异常,仅作为备选方案:
public void displaydynamicdata(int count) { try { // 显示前count个控件 for (int i = 1; i <= count; i++) { Field field = getClass().getDeclaredField("L" + i); EditText et = (EditText) field.get(this); if (et != null) { et.setVisibility(View.VISIBLE); } } // 隐藏剩余控件(按需选择) for (int i = count + 1; i <= 10; i++) { Field field = getClass().getDeclaredField("L" + i); EditText et = (EditText) field.get(this); if (et != null) { et.setVisibility(View.GONE); } } } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } }
内容的提问来源于stack exchange,提问作者SNAD
相关产品推荐
相关产品推荐

