安卓 - 以编程方式为视图设置ID

10

我正在编程地添加按钮,而按钮的数量取决于某些条件。为了添加RelativeLayout.LayoutParams规则,使按钮对齐在彼此的顶部,我需要设置它们的ID。所有2-3年前的答案都说可以使用setId(int)(例如,setId(1)),但现在已被禁止。(更新:仅使用int字面量是不行的。使用int变量就没问题。不知道为什么。)那么现在应该怎么做呢?


谁说这是禁止的? - Shadab Ansari
@ShadabAnsari 它被用红色下划线标出,并且该方法本身有一个注解 IdRes。 - Justin McGuire
@ShadabAnsari 当我在循环中执行“setId(i)”时,尽管我从第二个开始检查“previous” id,但它仍会为先前的按钮抛出NullPointerException。 - Justin McGuire
2个回答

17

根据API, 设置id属性并没有被禁止或废弃。这是最佳的使用方法。

  1. 创建res/values/ids.xml文件并定义:

<?xml version="1.0" encoding="utf-8"?>
<resources>
        <item type="id" name="button1" />
        <item type="id" name="button2" />
</resources>
一旦您拥有那个,您就可以使用setId
button1.setId(R.id.button1);
button2.setId(R.id.button2);

当我尝试使用"setId(1)"时,它被用红色下划线标出。谢谢您的回答,我会检查它的。 - Justin McGuire
是的,这是因为函数定义是 public void setId(@IdRes int id),它强制你传递一个ID资源。很高兴能帮到你。 - arsent
这是另一个问题。你需要为按钮添加另一条规则LeftOf或RightOf。这里有一个解决方案 - https://dev59.com/z2gv5IYBdhLWcg3wTvA- - arsent
解决了!非常感谢!只需将“ALIGN_TOP”替换为“BELOW”。还有一个问题(我知道这也是另一个话题,但也许我会很幸运):如何在屏幕底部但屏幕外放置通过编程创建的RL?(“rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)”没有帮助,它被放置在左上角) - Justin McGuire
好的,但是...在注释中可以吗? - Justin McGuire
显示剩余5条评论

10

既然您说您可以拥有任意数量的按钮,那么您可以使用以下方式为每个按钮设置id -

button.setId(View.generateViewId()); //Works for API 17 and above

如果 minSdk 低于 17,则可以使用 -
 button.setId(counter++); //Each time counter will be increment giving a unique id

仅适用于API 17+。我的sdkMin为15。 - Justin McGuire
修改了答案。 - Shadab Ansari
好奇怪...使用int字面量不行(下划线变红),但使用int变量却可以。 - Justin McGuire

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