Как найти TextView с идентификатором при создании идентификаторов с помощью View.GenerateViewId
Я создаю X количество TextViews динамически и даю им идентификаторы с помощью View.generateViewId().
TextView textView = new TextView(this);
textView.setText("_");
...
...
int id = View.generateViewId();
textView.setId(id);
И я получаю некоторые идентификаторы, сгенерированные, например, 1-5, в зависимости от количества TextViews. Но после поиска на разных форумах и официальном сайте Android я не могу понять, как получить доступ к этим идентификаторам.
Как я нацеливаюсь, скажем, на TextView с ID = 1, если я хочу установить toText() в этом? Пробовал несколько разных вещей, таких как использование findViewById и R-class, но, похоже, не работает.
Спасибо за прямую помощь или ссылки, которые имеют отношение, спасибо.
2 ответа
объявить карту:
public static final Map<String, Integer> ITEM_MAP = new HashMap<String, Integer>();
следить за элементами:
int id = View.generateViewId(); textView.setId(id); ITEM_MAP.put("key1", id); int id2 = View.generateViewId(); textView.setId(id2); ITEM_MAP.put("key2", id2);
3.и затем при необходимости:
int id = ITEM_MAP.get("key?X");
TextView textView = findViewById(id);
Удачи)
Если вы собираетесь использовать карту, я бы предложил то же самое, что и в ответе @Hovanes Mosoyan's, но вместо использования строк в качестве ключей используйте идентификаторы в качестве ключей, и тогда значением будут текстовые представления.
private Map<Int, TextView> textViewMap = HashMap();
...
// Add a textview to the map:
textViewMap.put(id, textView);
...
// Retrieve a textview from the map:
textViewMap.get(id);
Но, возможно, это подвело, поскольку идентификаторы представления не обязательно должны быть уникальными, и вы можете получить неправильное представление. Кроме того, если идентификатор повторяется, он будет перезаписан с использованием карты, следовательно, будет получен последний вид с тем же идентификатором.
Так вот лучший способ сделать это
Используйте теги. Представления имеют свои собственные теги, которые являются строками. Теперь по умолчанию тег представления пуст. Это означает, что мы можем манипулировать им так, как мы хотим, а для вас - использовать его в качестве уникального идентификатора. Теперь проблема в том, как мы генерируем уникальный идентификатор? Это просто, используйте текущее время, так как время никогда не повторится.
...
int id = System.currentTimeMillis(); // Use intelli-sense, this might not be the right name of the function
textView.setTag("" + id);
...
// Retrieve the view using the tag
TextView textView = findViewWithTag("" + id);
...