Android: Set Edit text or text view id Programmatically

≡放荡痞女 提交于 2019-11-28 10:09:51

You can't set id as a String. You can only assign integer as Id. But if you want to use String as id for the ease of use then - in res/values/ids.xml file

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <item name="edit_text_hello" type="id"/>

</resources>

And then use it as:

edText.setId(R.id.edit_text_hello);

So you can do what you need.

As the others have said you can't do this. Why do you want to / what's your requirement?

You could create an id in an xml file and use that - if you want it to be descriptive. This is also a better approach than using literal ints as you may get an id clash with other views in the layout hierarchy (unlikely but possible). This to me seems like the best / cleanest solution to your problem.

See http://developer.android.com/guide/topics/resources/more-resources.html#Id

e.g. in res/values/id.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item
        type="id"
        name="edittext_hello" />
</resources>

and then set with

edText.setId(R.id.edittext_hello);

No, you can't set id as a String. You can only assign integer as Id. You can use setTag() of View with String. But for id it will only Integer. As android resources are maintained in R.java file for integer type.

Update:

Why do you not set String or other data types (without integer) id to any android resource?

Because:

An Android Resource id is a 32-bit integer. It comprises

an 8-bit Package id [bits 24-31]
an 8-bit Type id [bits 16-23]
a 16-bit Entry index [bits 0-15]

The Package id identifies the Package chunk which contains the Resource.

The Type id identifies the type of the Resource and hence the corresponding Typespec chunk and Type chunk or chunks which contain its value or value(s)

The Entry index identifies the individual Resource within the Typespec chunk and Type chunk(s).

You can't set id with char, String or anything else except int...because, id is maintained by R.java file which contains only int.

You can use setTag() instead of setId().

Use setTag() as below...

edText.setTag("edittext_hello");

You can also achieve your problem without creating any extra resource like ids.xml and without having any id set to any of the EditText created dynamically.

Just need to have the parent reference of the element you have set a tag, and then, you can find it with the tag.

Parent

LinearLayout linearLayout= (LinearLayout) findViewById(R.id.layout_id);

and then

Childs

EditText editText = (EditText) linearLayout.findViewWithTag("yourStringTag");

for example..

Note: Obviously, if you have created EditTexts dynamically, you would do something like this:

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.
// ...

}

You can use setText() instead of setId().

edText_view.setText("Your Text");

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!