Android 按ID或标签查找按钮

Android 按ID或标签查找按钮,android,android-layout,Android,Android Layout,我以编程方式创建了一个按钮,并给它一个ID和一个标记 Button button = new Button(this); button.setId(i); button.setTag(anotherID); 我是一个柜台 现在我想改变这个按钮的背景,但是我找不到它 findViewByID(ID) 或 我使用ID和anotherID创建按钮时使用的值,但我只得到NullPointerException。我没有从XML文件中获得ID,因为我是通过编程方式创建按钮的。有人知道我如何处理这个问题吗

我以编程方式创建了一个按钮,并给它一个ID和一个标记

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

现在我想改变这个按钮的背景,但是我找不到它

findViewByID(ID)


我使用ID和anotherID创建按钮时使用的值,但我只得到NullPointerException。我没有从XML文件中获得ID,因为我是通过编程方式创建按钮的。有人知道我如何处理这个问题吗?

您通常会保留一个对以编程方式创建的按钮的引用。切勿手动设置Id。R文件是在可编译时间而不是运行时创建的,因此您的尝试显然是错误的。

将您创建的元素保存到如下列表中

List<Button> buttons = new ArrayList<Button>();
for(Button b: buttons) {
     if(b.getId().equals(your_id_to_check)) {
         //DO WHAT YOU WANT
     }
}
现在,您可以像下面这样在列表上获得您创建的视图

List<Button> buttons = new ArrayList<Button>();
for(Button b: buttons) {
     if(b.getId().equals(your_id_to_check)) {
         //DO WHAT YOU WANT
     }
}

使用标签查找控件的id,我在这里粘贴代码..希望这对您有所帮助

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

int Qid = button.getTag();

首先,你想做什么?如果要在动态创建后更改
按钮
背景色,则代码可以,但不提供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>();


它非常适合我的情况。id是数据库中的一些id,没有进行排序。

我认为在
yourview
添加按钮的地方,应该调用
yourview.findViewByID(id)
来查找它。是的,我想在创建按钮后更改按钮的颜色。我有20个按钮和一个“状态”。我想在事件发生后改变其中某个人的状态。你想改变哪种状态?你是如何得到这种状态的?或者,您可以使用不同的名称定义每个按钮,并可以更改背景颜色按钮颜色显示状态->背景中的绿色、红色、白色服务更改color@Boe-戴夫:不管怎样,我想你找到了解决办法。快乐编码:)这是我也尝试过的,但我在再次查找标记时遇到了问题,findViewWithTag(anotherID)是我尝试过的,但我无法让它工作
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++;
    }
}