我正在开发一个应用程序,我在其中以编程方式创建Edittext:
EditText edText = new EditText(this);
edText.setId(1);
edText .setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,0f));
edText .setInputType(InputType.TYPE_CLASS_NUMBER);
edText.setHint("dsgsdgsgs");
tableLayout.addView(edText);
这里我将编辑文本的ID设置为" 1"整数行edText.setId(1);
。
但我需要的是 - 我想在字符中设置ID,例如:
edText.setId("edittext_hello");
这样我就可以通过该ID访问它了。如何帮助我完成这项任务。
答案 0 :(得分:20)
正如其他人所说,你不能这样做。为什么你想要/你的要求是什么?
您可以在xml文件中创建 id 并使用它 - 如果您希望它是描述性的。这也是比使用文字int
更好的方法,因为您可能会在布局层次结构中与其他视图发生 id 冲突(不太可能,但可能)。这对我来说似乎是解决问题的最佳/最干净的解决方案。
请参阅http://developer.android.com/guide/topics/resources/more-resources.html#Id
e.g。在res/values/id.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item
type="id"
name="edittext_hello" />
</resources>
然后用
设置edText.setId(R.id.edittext_hello);
答案 1 :(得分:17)
您不能将id设置为String。您只能将整数指定为Id。但是如果你想使用String作为id以便于使用那么 - 在 res / values / ids.xml 文件
中<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="edit_text_hello" type="id"/>
</resources>
然后将其用作:
edText.setId(R.id.edit_text_hello);
所以你可以做你需要的。
答案 2 :(得分:4)
不,您不能将id
设置为字符串。您只能将integer
指定为ID。您可以将setTag()
View
与String一起使用。但对于id,它只会整数。由于android资源在R.java文件中维护为整数类型。
<强>更新强>
为什么不将String或其他数据类型(没有整数)id设置为任何Android资源?
<强>因为:强>
Android资源ID是32位整数。它包括
an 8-bit Package id [bits 24-31]
an 8-bit Type id [bits 16-23]
a 16-bit Entry index [bits 0-15]
包ID 标识包含资源的包块。
类型ID 标识资源的类型,因此标识相应的Typespec块和 键入包含其值或值的块或块
条目索引标识Typespec块和类型块中的各个资源。
答案 3 :(得分:3)
您无法使用id
,char
或String
以外的任何其他内容设置int
...因为id
由{维护} R.java
{1}}仅包含int
。
您可以使用setTag()
代替setId()
。
使用setTag()
如下...
edText.setTag("edittext_hello");
答案 4 :(得分:0)
您也可以在不创建任何额外资源(如ids.xml)且不将任何id设置为动态创建的任何EditText的情况下实现您的问题。
只需要设置标签元素的父引用,然后就可以使用标记找到它。
<强>父强>
LinearLayout linearLayout= (LinearLayout) findViewById(R.id.layout_id);
然后
<强>童车强>
EditText editText = (EditText) linearLayout.findViewWithTag("yourStringTag");
例如..
注意:显然,如果你动态创建了EditTexts,你可以这样做:
for (Map.Entry<String, String> entry : yourHashMap.entrySet()) {
LinearLayout linearLayout= (LinearLayout) findViewById(R.id.parent_layout_id);
EditText editText = (EditText) linearLayout.findViewWithTag(entry.getKey());
// Then do whatever you want with your editText referenced.
// ...
}
答案 5 :(得分:-3)
您可以使用setText()而不是setId()。
edText_view.setText(“你的文字”);