繁体   English   中英

通过ID或TAG查找按钮

[英]find button by ID or TAG

我以编程方式创建了一个按钮,并为其指定了ID和标签。

Button button = new Button(this);
button.setId(i);
button.setTag(anotherID);

我是柜台。

现在我想更改此按钮的背景,但是我找不到

findViewByID(ID)

要么

findViewWithTag(anotherID)

我使用ID和anotherID来创建按钮所使用的值,但是我只得到NullPointerExceptions。 我没有从XML文件获得ID,因为我以编程方式创建了按钮。 有人知道我该如何处理吗?

将您创建的元素保存到这样的列表中

List<Button> buttons = new ArrayList<Button>();

将您创建的按钮添加到列表中

Button button = new Button(this);
button.setId(i);
button.setTag(anotherID);

buttons.add(button);

现在,您可以像这样在列表中创建视图

for(Button b: buttons) {
     if(b.getId().equals(your_id_to_check)) {
         //DO WHAT YOU WANT
     }
}

通常,您将保留对以编程方式创建的按钮的引用。 切勿手动设置ID。 R文件是在compille时而非运行时创建的,因此您的尝试是完全错误的。

使用标签来查找控件的ID,我在这里粘贴代码..这可能对您有所帮助。

Button button = new Button(this);
button.setTag(value);

int Qid = button.getTag();

首先,您想做什么? 如果要动态创建Button背景后再更改它的颜色,则您的代码可以使用,但不要给它提供ID。 因为id是文件R.java生成的整数值。

只要看一看,您就会知道:

因此,使用以下代码:

Button button = new Button(this);
button.setBackgroundColor(Color.White);

希望你明白了。 如果您有任何问题,请告诉我。

这是我的解决方案:

public static List<Button> buttons = new ArrayList<Button>();
public static List<Integer> ids = new ArrayList<Integer>();

...

buttons.add(button);
ids.add(something.getInt(0));

...

public void changeButtonState(int res, int ID){ 
    int counter = 0;
    for(Integer i: ids){
        if(i==ID){
            Button b = buttons.get(counter);
            b.setBackgroundResource(res);
        }
        counter++;
    }
}

它非常适合我的情况。 这些ID是数据库中的一些ID,未排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM