动态设置视图的ID

4

我需要动态创建4个按钮,并且需要动态生成它们的id,类似于:

  for(int i = 1; i <= 4; i++){
    Button button = new Button(activity);

    // i need something here to turn this string into an int;    
    button.setId("button" + i) 
  }

我知道如何动态获取现有视图的id:
getResources().getIdentifier("button2", "button", getPackageName())

我不知道的是如何动态生成id。

我在网上搜索过,但没有找到任何东西。

我需要像这样的东西:

int id = getResources().setIdentifier("button2", "button", getPackageName());
button.setid(id);

Thank you in advance.


1
你为什么要调用 setId() 呢?你已经有了那些 Button 的引用,所以你需要这些 ID 做什么呢? - pskink
2
只需使用.setTag(string value)进行操作,它更加实用。 - M D
1
因为稍后我需要通过ID识别我创建的按钮并对其进行操作。 - MDP
1
嗨@pskink,我编辑了我的代码。我不明白如何识别引用,因为按钮是动态生成的。你对我说的话中有些东西我不理解。 - MDP
1
正如之前提到的,您已经有了按钮的引用,只需使用 .setTag(Object) 来标识按钮,无需任何 ID。 - Thror
显示剩余4条评论
4个回答

9
更好的做法是使用button.setId(View.generateViewId()),它在API 17中引入。

4
您可以使用View.setId(int)来实现。根据文档,id在树形结构中不需要唯一,在程序中添加的Views可以使用任何(正数)整数。
文档说:

标识符在此视图层次结构中不必唯一。标识符应为正数。

如果你想要将一些其他信息附加到View中,可以使用setTag()将对象标记到视图上,并通过findViewWithTag("obj")查找。
有关创建id的更多信息,请参见https://dev59.com/NGoy5IYBdhLWcg3wkO-h#13241629

1
最佳实践是保持所有ID唯一,但这不是强制性的! - Jayanth

3

1、在 "values" 文件夹中创建一个 XML 文件,

2、<resources> <item type="id" name="button1">123</item> </resources>

3、在 Java 代码中使用它 button.setId(R.id.button1);


0

我遇到了同样的问题,只是针对ImageView。
由于我没有找到答案,而且每个人基本上都说
“不可能”或“使用xml”,所以我创建了自己的哈希映射表。 https://dev59.com/bmox5IYBdhLWcg3w1Xy-#53321713


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接