it-roy-ru.com

Android: Установите Редактировать текст или идентификатор просмотра текста Программно

Я разрабатываю приложение, в котором я создаю 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);

Здесь я устанавливаю идентификатор текста редактирования как «1» в строке edText.setId(1); в целом числе. 

Но то, что мне нужно, - я хочу установить идентификатор символа, например:

edText.setId("edittext_hello");

Так что я могу получить к нему доступ через этот идентификатор. Как я могу решить эту задачу, пожалуйста, помогите.

8
Optim India

Вы не можете установить идентификатор в качестве строки. Вы можете назначить только целое число как Id. Но если вы хотите использовать String в качестве идентификатора для простоты использования, тогда -in res/values ​​/ ids.xml file 

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

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

</resources>

И затем используйте это как:

edText.setId(R.id.edit_text_hello);

Так что вы можете делать то, что вам нужно.

15
Manoj Fegde

Как говорили другие, ты не можешь этого сделать. Почему вы хотите/каковы ваши требования? 

Вы можете создать id в XML-файле и использовать его, если хотите, чтобы он был описательным. Это также лучший подход, чем использование литеральных ints, поскольку вы можете столкнуться с id с другими представлениями в иерархии макета (маловероятно, но возможно). Мне кажется, это лучшее/самое чистое решение вашей проблемы.

Смотрите http://developer.Android.com/guide/topics/resources/more-resources.html#Id

например в 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);
20
Dori

Нет, вы не можете установить id в качестве строки. Вы можете назначить только integer в качестве идентификатора. Вы можете использовать setTag() из View со строкой. Но для id это будет только Integer. Так как ресурсы Android хранятся в файле R.Java для целочисленного типа.

Обновление:

Почему вы не устанавливаете идентификатор String или других типов данных (без целого числа) для какого-либо ресурса Android?

Так как:

Идентификатор ресурса Android представляет собой 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]

Идентификатор пакета идентифицирует блок пакета, который содержит ресурс.

Идентификатор типа идентифицирует тип Ресурса и, следовательно, соответствующий чанк Typespec и чанк или Type, которые содержат его значение или значения.

Индекс записи идентифицирует отдельный Ресурс в блоке Typespec и блоке (-ах) Типа. 

4
user370305

Вы не можете установить id с помощью char, String или чего-либо еще, кроме int..., поскольку id поддерживается файлом R.Java, который содержит только int.

Вы можете использовать setTag() вместо setId().

Используйте setTag() как показано ниже ...

edText.setTag("edittext_hello");
3
Hamid Shatu

Вы также можете решить свою проблему, не создавая никаких дополнительных ресурсов, таких как ids.xml, и не устанавливая идентификаторы для любого из 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.
// ...

}
0
FLBKernel