使用 View.GenerateViewId 创建 ID 时如何找到带有 ID 的 TextView

How to find TextView with ID when creating ID's with View.GenerateViewId

我正在动态创建 X 数量的 TextView 并使用 View.generateViewId() 为它们提供 ID。

 TextView textView = new TextView(this);
  textView.setText("_");
  ...
  ...  
  int id = View.generateViewId();
  textView.setId(id);

然后我生成了一些 ID,例如 1-5,具体取决于 TextView 的数量。但是在搜索了不同的论坛和官方 android 站点后,我不知道如何访问这些 ID。

如果我想在 ID = 1 的 TextView 中设置 setText(),我该如何定位?尝试了一些不同的东西,比如使用 findViewById 和 R-class 但似乎没有用。

感谢任何直接帮助或相关链接,谢谢。

  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.and 然后在需要的时候:

    int id = ITEM_MAP.get("key?X"); 
    TextView textView = findViewById(id);

祝你好运)

如果你要一张地图,我会建议与@Hovanes Mosoyan 的答案相同,但不要使用字符串作为键,而是使用 id 作为键,然后值将是文本视图。

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

但是,这可能会让人失望,因为视图 ​​ID 不需要是唯一的,您可能会看到错误的视图。此外,如果 id 重复,它将被地图覆盖,因此将采用具有相同 id 的最后一个视图。

所以这是一个更好的方法

使用标签。视图有自己的标签,它们是字符串。现在,默认情况下,视图的标签是空的。这意味着,我们可以按照我们想要的方式对其进行操作,并为您将其用作唯一标识符。现在,问题是我们如何生成一个唯一的 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);
...