我试图更改数组中包含的多个ImageView颜色。
所有8 ImageViews都有block1,block2的id .对于block8,我在循环中使用block+i和findViewById来引用它们。
private ImageView arrowUp, arrowDown;
private ImageView[] blocks = new ImageView[8];
private TextView result;
private static final String TAG = "TEST";
private int jaugeValue = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
arrowDown = findViewById(R.id.arrowDown);
arrowUp = findViewById(R.id.arrowUp);
result = findViewById(R.id.result);
for (int i = 0; i < 8; i++) {
int res = getResources().getIdentifier("block"+i, "id", getPackageName());
blocks[i] = (ImageView) findViewById(res);
}
blocks[0].setColorFilter(Color.argb(255, 255, 255, 255));
arrowDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
jaugeValue--;
changeTextValue();
}
});
arrowUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
jaugeValue++;
changeTextValue();
}
});
}
private void changeTextValue(){
String displayValue = Integer.toString(jaugeValue);
if(jaugeValue < 0)
{
jaugeValue = 0;
displayValue = Integer.toString(jaugeValue);
}
else if(jaugeValue > 8)
{
jaugeValue = 8;
displayValue = Integer.toString(jaugeValue);
}
result.setText(displayValue);
}
}在此之后,我尝试使用以下方法设置ImageView颜色之一:
blocks[0].setColorFilter(Color.argb(255, 255, 255, 255));此时,我得到了一个错误:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setColorFilter(int)' on a null object reference对于为什么这会导致空引用有什么想法吗?
在日志中打印时,我还可以确认我的数组中填充了ImageViews。
发布于 2020-02-13 05:28:46
您必须像下面这样更改for循环,因为您是用0启动for循环的,但是没有 id的block0,所以会出现错误。
for (int i = 0; i < 8; i++) {
int res = getResources().getIdentifier("block"+(i+1), "id", getPackageName());
blocks[i] = (ImageView) findViewById(res);
}我希望这能帮到你!
https://stackoverflow.com/questions/60200855
复制相似问题