Как найти TextView с идентификатором при создании идентификаторов с помощью View.GenerateViewId - PullRequest
0 голосов
/ 16 сентября 2018

Я создаю количество 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, если я хочу установить в этом поле функцию SetText ()?Пробовал несколько разных вещей, таких как использование findViewById и R-class, но, похоже, не работает.

Оцените любую прямую помощь или ссылки, которые имеют отношение, спасибо.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Если вы собираетесь использовать карту, я бы предложил то же самое, что и в ответе @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);
...
0 голосов
/ 16 сентября 2018
  1. объявить карту:

    public static final Map<String, Integer> ITEM_MAP = new HashMap<String, Integer>();
    
  2. отслеживать элементы:

    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);

Удачи)

...