按ID或TAG查找按钮

时间:2012-03-20 07:52:52

标签: android android-layout

我以编程方式创建了一个按钮,并为其提供了ID和标记。

Button button = new Button(this);
button.setId(i);
button.setTag(anotherID);
我是个柜台。

现在我想更改此按钮的背景,但我无法通过

找到它
findViewByID(ID)

findViewWithTag(anotherID)

我使用ID和anotherID创建按钮的值,但我只获得NullPointerExceptions。我没有从XML文件中获取任何ID,因为我以编程方式创建按钮。有人知道我怎么处理这个吗?

5 个答案:

答案 0 :(得分:6)

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

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
     }
}

答案 1 :(得分:0)

您通常会保留对以编程方式创建的按钮的引用。永远不要手动设置Id。 R文件是在编译时而不是运行时创建的,所以你的尝试是完全错误的。

答案 2 :(得分:0)

使用标签查找控件的ID,我在这里粘贴代码..可以帮助你。

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

int Qid = button.getTag();

答案 3 :(得分:0)

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

只要看到它,你就会知道:

所以请使用以下代码:

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

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

答案 4 :(得分:0)

这是我的Soulution:

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++;
    }
}

它适用于我的情况。 ids是数据库中的一些ID,没有排序。