Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应设置的按钮的空数组_Java_Android_Nullpointerexception - Fatal编程技术网

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
                          }
                    });
             }
     });