Java findViewWithTag在循环内使用时提供空对象引用
在安卓应用程序中,我有4个按钮,我分别给了它们标记1、2、3和4,如果每个按钮与代码中的某个值“i”匹配(或不匹配),我想使用for循环来更改每个按钮中的文本在for循环中,从1到4,我当然会将其转换为字符串。但是当我运行代码时,它会给我null对象引用,应用程序崩溃 应用程序调用ans.setText()时出错;或任何其他方法。。 **我确实尝试启动一个对象,并通过它在循环外的标记找到它,它工作起来没有问题Java findViewWithTag在循环内使用时提供空对象引用,java,android,Java,Android,在安卓应用程序中,我有4个按钮,我分别给了它们标记1、2、3和4,如果每个按钮与代码中的某个值“i”匹配(或不匹配),我想使用for循环来更改每个按钮中的文本在for循环中,从1到4,我当然会将其转换为字符串。但是当我运行代码时,它会给我null对象引用,应用程序崩溃 应用程序调用ans.setText()时出错;或任何其他方法。。 **我确实尝试启动一个对象,并通过它在循环外的标记找到它,它工作起来没有问题 for(int i=1;i<=4;i++){ Button
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);
}
}
}
绑定布局并使用childCount而不是标记解析视图 假设它是您拥有的线性布局(但您可以相应地进行调整):
LinearLayout布局=(LinearLayout)findViewById(您的布局的R.id.name);
对于(int i=0;i
注意:在循环中,将i定义为整数,然后检查
i==correct()
。您的correct()方法是否返回一个应该等于i的整数?可能您在这里没有共享的代码中有更多问题。绑定布局并使用childCount而不是标记解析视图
假设它是您拥有的线性布局(但您可以相应地进行调整):
LinearLayout布局=(LinearLayout)findViewById(您的布局的R.id.name);
对于(int i=0;i
注意:在循环中,将i定义为整数,然后检查
i==correct()
。您的correct()方法是否返回一个应该等于i的整数?可能您在这里没有共享的代码上有更多问题。您正在调用的“findViewWithTag()”是什么?它有那些按钮作为它的子对象吗?啊哈…我完全是一个初学者,我不知道你说的“它有那些按钮作为它的子对象”是什么意思。我也不知道我实际上调用的是什么视图。我只做了onClick方法并给它参数(视图)我不明白为什么这个参数实际上是用于谷歌搜索,它没有多大帮助按钮
s不是被点击的视图
的子项,因此你从find调用中得到空值。你能发布你的布局XML文件吗?在Android中,每个UI元素都有一个唯一的id(在布局XML中设置)。您可以尝试调用findViewById(R.id.your_button_id)
而不是findViewWithTag
为每个view
的按钮调用“findViewWithTag()”on?它有那些按钮作为它的子对象吗?啊哈…我完全是一个初学者,我不知道你说的“它有那些按钮作为它的子对象”是什么意思。我也不知道我实际上调用的是什么视图。我只做了onClick方法并给它参数(视图)我不明白为什么这个参数实际上是用于谷歌搜索,它没有多大帮助按钮
s不是被点击的视图
的子项,因此你从find调用中得到空值。你能发布你的布局XML文件吗?在Android中,每个UI元素都有一个唯一的id(在布局XML中设置)。您可以尝试调用findViewById(R.id.your_button_id)
而不是findViewWithTag
每个按钮我的布局中还有几个按钮和视图,使用childCount迭代是否也会影响它们?是的,方法correct返回一个整数,检查它是否等于i。,返回的值总是在1和4之间(包括1和4),它会受到影响,是的。除非前面提到的4个按钮彼此紧挨着,并且可以在你现在拥有的按钮中以嵌套布局进行分组,否则我想我可以将我想要的按钮放在网格布局中,并对其进行迭代..谢谢男士:)很高兴我能帮上忙!不过,我的布局中还有一些按钮和视图,使用childCount迭代是否也会影响它们?是的,方法correct返回一个整数,检查它是否等于i。,返回的值总是在1和4之间(包括1和4),它会受到影响,是的。除非前面提到的4个按钮彼此紧挨着,并且可以在你现在拥有的按钮中以嵌套布局进行分组,否则我想我可以将我想要的按钮放在网格布局中,并对其进行迭代..谢谢男士:)很高兴我能帮上忙!
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)
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("...");
}