我正在尝试更改按钮数组的属性,但是我遇到了一些非常奇怪的错误。我试图循环按钮来编辑每个按钮的高度属性,但是当我设置for循环(i = 0; i< 3; i ++)时,buttonSkater [i] .setHeight(buttonHeight);结果似乎是9个按钮被改变了!当我设置i< 14(有14个按钮)时,应用程序崩溃并出现NullPointerException。
package com.rollerderby.lineuptracker;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.Button;
public class Setup extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.setup);
Button[] buttonSkater = new Button[14];
buttonSkater[0] = (Button) findViewById(R.id.buttonSkater1);
buttonSkater[1] = (Button) findViewById(R.id.buttonSkater2);
buttonSkater[2] = (Button) findViewById(R.id.buttonSkater3);
int screenHeight = getWindowManager().getDefaultDisplay().getHeight();
int buttonHeight = (screenHeight-60)/14;
for(int i=0; i<14; i++)
{
buttonSkater[i].setHeight(buttonHeight);
}
}
}
这似乎是一个非常奇怪的错误......我错过了一些明显的东西吗?
(通过为新按钮创建空间来调整数组大小错误?)
答案 0 :(得分:3)
完全基于您的代码示例,您尝试访问仅设置了3个索引(0到2)的数组中的第3到第14个元素,其他(默认情况下)初始化为null。至于14个按钮,它们只是14个按钮的实例吗?
答案 1 :(得分:3)
Button[] buttonSkater = new Button[14];
buttonSkater[0] = (Button) findViewById(R.id.buttonSkater1);
buttonSkater[1] = (Button) findViewById(R.id.buttonSkater2);
buttonSkater[2] = (Button) findViewById(R.id.buttonSkater3);
相反,您可以初始化数组的大小,如:
Button[] buttonSkater = new Button[] {
(Button) findViewById(R.id.buttonSkater1),
(Button) findViewById(R.id.buttonSkater2),
(Button) findViewById(R.id.buttonSkater3),
};
当您处理数组时,而不是执行以下操作,这意味着如果您更改数组的大小,则需要在多个位置执行此操作:
for (int i = 0; i < 14; i++)
...
我会用:
for (int i = 0; i < buttonSkater.length; i++)
...
祝你好运。
答案 2 :(得分:1)
如果没有访问你的XML,我的猜测是,如果有一个循环直到3你正在更改其他9个按钮,那是因为他们的id可能是相同的(即复制/粘贴错误)。
另外,从您的代码来看,您的应用程序在您的应用程序崩溃到14之前似乎正常;毕竟,只有前3个元素被实例化。一旦到达第4个,它应该访问一个空值,从而导致错误。
答案 3 :(得分:0)
嗯,首先,你的“14”循环失败,因为只有位置0-2被分配给任何东西。在Java中,当你做
时 String[] strings = new String[5];
除了数组实际上已经初始化了
strings[0] == null;
等等,直到你实际初始化了这些值。
您需要使用
手动初始化每个值strings[0] = new String();
strings[1] = new String();
...
我们需要查看其他代码来回答有关修改九个按钮的问题。