如何从 java/android 中的字符串变量创建字段 ID
Posted
技术标签:
【中文标题】如何从 java/android 中的字符串变量创建字段 ID【英文标题】:How to create field ID from string variable in java/android 【发布时间】:2017-12-20 15:00:51 【问题描述】:目的是字段(EditText、Spinner、RadioGroup 等)和 GUI(布局/视图)完全基于字符串(存储在数据库中的字段 ID 名称)动态创建,这意味着每个字符串将代表字段 ID用于区分所有单个字段。
我有一个字符串说,
String fieldName = "etAccountNo"; //id "etAccountNo" of field is placed in string "fieldName".
现在我想以编程方式创建一个新的 EditText 字段,其变量名称将是 etAccountNo(将用于在 android 中解释 EditText) 即
fieldName = new EditText(context); //error here Incompatible types. required String but found EditText
意思
//etAccountNo = new EditText(context); //error here
我了解此错误,但我需要针对此目标的可能解决方案。
由于 GUI 是通过编程/动态创建的,所以我必须添加 setLayoutParams 和 setText 等字段属性。例如
etAccountNo.setText"My Field";
【问题讨论】:
您遇到什么错误?发布您的日志和正确的代码 不兼容的类型。必需的字符串,但找到了 EditText 这是不可能的,但我很好奇你为什么要这样做。你想解决什么问题?例如,变量的名称是为了程序员的利益,但您想在运行时进行更改……所以名称无关紧要。 您将字符串分配为 Edittext。这就是“不兼容类型”的原因。 你能发布你想要做什么的代码吗? 【参考方案1】:基于评论 您可以动态创建 GUI,并可以将它们与数据库中的 id 映射,而不是使用相同的变量。通过将字符串的 id 保存在 db 中并将相同的 id 设置为您创建的相应视图
如果您想实现这一点,您可以动态创建视图,然后将它们的引用与数据库中的字符串关联起来。
例子:
Hashtable<String, View> views = new Hashtable<>();
EditText et1 = new EditText(context);
views.put("etAccountNo", et1);
EditText et2 = new EditText(context);
views.put("blablabla", et2);
完成后,您可以使用数据库中的字段名称访问您的视图:
EditText accountNo = (EditText)views.get("etAccountNo");
【讨论】:
这可能是我正在寻找的,但我需要验证它 不,兄弟,etAccountNo 应该是 EditText 的字段 id。即 EditText etAccountNo = (EditText)views.get("etAccountNo");因为我需要进一步使用这个变量作为字段 id。 @AbdulSaleem 我认为这是解决您问题的好方法。可能你没看懂HashTable的观点?【参考方案2】:我能想到的最好的解决方案是创建一个可以将各种String
s 映射到View
s 的工厂类。例如:
public static View getViewForString(String string, Context context)
switch(string)
case "TextView":
return new TextView(context);
case "ListView":
return new ListView(context);
或者:
static <V extends View> Optional<V> getView(String name, Context context, Class<V> c)
V view = null;
switch (name)
case "TextView":
view = c.cast(new TextView(context));
break;
return Optional.ofNullable(view);
但这太可怕了,我鼓励您探索其他方法来填充您的 UI。
因为它是一个以编程方式生成的视图,它不会有一个 id 值。您可以使用view.setId()
自己分配一个 - 因此,您可以使用view.setId("TextView".hashCode())
或view.setId(View.generateViewId())
。
【讨论】:
我怎样才能获得新视图的 id?或者我如何分配同名的 id,因为我必须进一步处理视图 id 因为它是一个以编程方式生成的View
,我不相信它会有一个 id 值。您可以使用view.setId()
自己分配一个 - 因此,您可以使用view.setId("TextView".hashCode())
或view.setId(View.generateViewId())
。
看起来不错。请在答案详细信息中添加您的最后评论。
为什么它很可怕?
请详细说明如何从活动中调用视图?以上是关于如何从 java/android 中的字符串变量创建字段 ID的主要内容,如果未能解决你的问题,请参考以下文章
从 Java Android 中的嵌套 JSON 对象获取数据