我以编程方式创建了一个按钮,并为其提供了ID和标记。
Button button = new Button(this);
button.setId(i);
button.setTag(anotherID);
我是个柜台。
现在我想更改此按钮的背景,但我无法通过
找到它findViewByID(ID)
或
findViewWithTag(anotherID)
我使用ID和anotherID创建按钮的值,但我只获得NullPointerExceptions。我没有从XML文件中获取任何ID,因为我以编程方式创建按钮。有人知道我怎么处理这个吗?
答案 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,没有排序。