【问题标题】:Dynamically set id of a view动态设置视图的id
【发布时间】:2018-11-15 22:54:30
【问题描述】:

我必须动态创建 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);

提前谢谢你。

【问题讨论】:

  • 你为什么要打电话给setId()?你有那些 Buttons 的引用,那么你需要这些 ID 做什么?
  • 随便玩.setTag(string value)吧。它更有用
  • 因为稍后我需要通过 id 来识别我创建的按钮并对其进行操作
  • 嗨@pskink,我编辑了我的代码。我不明白如何识别引用,因为按钮是动态生成的。你对我说的话我有些不明白
  • 前面已经提到,你有button的引用,只要用.setTag(Object)来识别button,不需要任何ID。

标签: android android-layout android-view


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以为此使用View.setId(int)。根据文档id 不需要在树层次结构中是唯一的,您可以使用任何(正)整数作为您以编程方式添加的Views

    医生说

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

    如果您想在View 中附加一些其他信息,您可以使用setTag() 标记要查看的对象,并通过findViewWithTag("obj"); 进行查看

    在此处查看有关创建 ID 的更多信息https://stackoverflow.com/a/13241629/5235032

    【讨论】:

    • 保持所有 ID 唯一性的最佳做法,但这不是强制性的!
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      有同样的问题,仅适用于 ImageView。
      由于我没有找到答案,大家基本上都说要么
      “不可能”或“使用 xml”,我创建了自己的 hashMap。 https://stackoverflow.com/a/53321713/10295425

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-03
        相关资源
        最近更新 更多