Java 应设置的按钮的空数组
我不明白为什么我的代码中会出现: 空引用对象 当我试着点击我的按钮时Java 应设置的按钮的空数组,java,android,nullpointerexception,Java,Android,Nullpointerexception,我不明白为什么我的代码中会出现: 空引用对象 当我试着点击我的按钮时 buttonMenuOption = findViewById(R.id.buttonOption); Button[] buttonsOption = new Button[nbObjects]; buttonsOption[0] = findViewById(R.id.buttonOption0); buttonsOption[1] = findViewById(R.id.buttonOption1); buttonMen
buttonMenuOption = findViewById(R.id.buttonOption);
Button[] buttonsOption = new Button[nbObjects];
buttonsOption[0] = findViewById(R.id.buttonOption0);
buttonsOption[1] = findViewById(R.id.buttonOption1);
buttonMenuOption.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setContentView(R.layout.graph_option);
for (int i = 0; i < nbObjects; i++) {
final int j = i;
buttonsOption[i].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Do stuff
}
});
}
});
问题发生在
buttonsOption[0] = findViewById(R.id.buttonOption0);
buttonsOption[1] = findViewById(R.id.buttonOption1);
在相关布局初始化之前声明
因此,您可能必须在setContentView(R.layout.graph_选项)之后声明按钮引用代码>如下所示
buttonMenuOption = findViewById(R.id.buttonOption);
final Button[] buttonsOption = new Button[nbObjects];
buttonMenuOption.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setContentView(R.layout.graph_option);
buttonsOption[0] = findViewById(R.id.buttonOption0);//change here
buttonsOption[1] = findViewById(R.id.buttonOption1);// change here
for (int i = 0; i < nbObjects; i++) {
final int j = i;
buttonsOption[i].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Do stuff
}
});
}
});
buttonMenuOption=findviewbyd(R.id.buttonOption);
最终按钮[]按钮选项=新按钮[nbObjects];
buttonMenuOption.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
setContentView(R.layout.graph_选项);
buttonsOption[0]=findViewById(R.id.ButtonOptions);//在此处更改
buttonsOption[1]=findViewById(R.id.ButtonOptions 1);//在此处更改
对于(int i=0;i
是因为您声明了一个按钮数组,但没有为数组的索引声明任何按钮吗
如果buttonsOption[0]为空,我将声明数组,然后声明按钮
Button[] buttonsOption = new Button[nbObjects];
for(int i=0; i<nbObjects;i++){
buttonOption[i] = new Button();
}
按钮[]按钮选项=新按钮[nbObjects];
对于(int i=0;i您在setContentView()
之前使用的findViewById
,没有可在其中查找其他视图的视图。您需要首先将XML设置为活动视图,然后可以调用findViewById
或者你可以做一些不同的事情,就像那样
buttonMenuOption = findViewById(R.id.buttonOption);
Button[] buttonsOption = new Button[nbObjects];
final View newContentView = LayoutInflater.from(this).inflate(R.layout.graph_option, null);
buttonsOption[0] = newContentView.findViewById(R.id.buttonOption0);
buttonsOption[1] = newContentView.findViewById(R.id.buttonOption1);
buttonMenuOption.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setContentView(newContentView);
for (int i = 0; i < nbObjects; i++) {
final int j = i;
buttonsOption[i].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Do stuff
}
});
}
});
buttonMenuOption=findviewbyd(R.id.buttonOption);
按钮[]按钮选项=新按钮[nbObjects];
最终视图newContentView=LayoutInflater.from(this).充气(R.layout.graph_选项,null);
buttonsOption[0]=newContentView.findViewById(R.id.ButtonOption 0);
buttonsOption[1]=newContentView.findViewById(R.id.ButtonOption 1);
buttonMenuOption.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
setContentView(newContentView);
对于(int i=0;i
我猜您正在更改可能不包含相同按钮的内容视图。因此,在for循环中使用findViewById。请添加您的xml
代码和logcat。xml+logcat addedy您是对的,我不明白为什么会出现错误。无论如何,谢谢。请提供一个,但我猜在您尝试获取后将加载视图使用按钮
,这是当使用正确的返回值findViewById
时最常见的错误null
哇…我在键入时与某人交谈…你应该在答案中添加更多内容。突出显示问题以及你为使其正常工作所做的工作。下面的例子太宽泛了;)@AxelH ohh..好的,答案编辑完成!最好用代码发布解释(顺便说一下,注释很好;))这样会更容易理解,当然,它会引起兴趣。@AxelH是的,你的权利,下次我会记住它!
buttonMenuOption = findViewById(R.id.buttonOption);
Button[] buttonsOption = new Button[nbObjects];
final View newContentView = LayoutInflater.from(this).inflate(R.layout.graph_option, null);
buttonsOption[0] = newContentView.findViewById(R.id.buttonOption0);
buttonsOption[1] = newContentView.findViewById(R.id.buttonOption1);
buttonMenuOption.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setContentView(newContentView);
for (int i = 0; i < nbObjects; i++) {
final int j = i;
buttonsOption[i].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Do stuff
}
});
}
});