使用 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 但似乎没有用。
感谢任何直接帮助或相关链接,谢谢。
声明地图:
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.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);
...
我正在动态创建 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 但似乎没有用。
感谢任何直接帮助或相关链接,谢谢。
声明地图:
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.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);
...