在循环内使用时,findViewWithTag提供空对象引用

时间:2019-02-04 13:39:31

标签: java android

在一个Android应用中,我有4个按钮,分别为其分别赋予了标签1,2,3和4,并且我想使用for循环更改每个按钮中的文本(如果它匹配(或不匹配)a)我的代码中的某个值,for循环中的“ i”从1到4,我当然会将其转换为字符串..但是当我运行代码时,它给了我空对象引用,应用崩溃 当应用程序调用ans.setText()时发生错误;或任何其他方法。 **我确实尝试启动对象并通过循环外的标签找到它,并且没有问题

for(int i=1;i<=4;i++){
           Button ans=(Button) view.findViewWithTag(String.valueOf(i));
            if(i==correct()){
                ans.setText(x+y+"");
            }else{
                int z=rand.nextInt(100)+rand.nextInt(100);
                if(z==x+y){
                    ans.setText(z+rand.nextInt(100));
                }
                else{
                    ans.setText(z);
                }
            }
        }

给出错误:

 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setText(java.lang.CharSequence)' on a null object reference
        at com.example.braintrainer.MainActivity.go(MainActivity.java:52)

1 个答案:

答案 0 :(得分:0)

绑定您的布局并使用childCount代替标签来解析视图。

假定它是线性布局(但您可以相应地对其进行调整):

    LinearLayout layout = (LinearLayout) findViewById(R.id.name_of_your_layout);
    for (int i = 0; i < layout.getChildCount(); i++) {
            View v = layout.getChildAt(i);
            //add your checks here and set the text using v.setText("...");  
        }

注意:在循环中,将i定义为整数,然后检查是否为i == correct()。您的correct()方法是否返回一个应该等于i的整数?也许您在此处未共享的代码上遇到了更多问题。