我的问题是,findViewById
函数似乎已经疯了,尽管我很可能错误地使用它。
该应用程序工作正常,然后我在页面上删除了一些新的TextView
,这似乎完全混淆了它。
findViewById
函数现在要么完全找到错误的控件,要么根本找不到任何东西(并且将返回null)。我已经检查了我的activity_main.xml
文件,但ID仍然是正确的。
有人可以帮忙吗?
这是我使用的典型示例:
public void toggleButtonNetwork_Click(View v) {
ToggleButton tb = (ToggleButton) this.findViewById(R.id.toggleButtonNetwork);//did work, now does not work!
}
我可能添加的唯一见解是我的R.java文件在工作时看起来像这样:
...
public static final class id {
public static final int menu_settings=0x7f070004;
public static final int textViewGPS=0x7f070003;
public static final int textViewNetwork=0x7f070001;
public static final int toggleButtonGPS=0x7f070002;
public static final int toggleButtonNetwork=0x7f070000;
}
...
现在看起来像这样(破碎):
public static final class id {
public static final int menu_settings=0x7f070006;
public static final int textView1=0x7f070004;
public static final int textView2=0x7f070005;
public static final int textViewGPS=0x7f070002;
public static final int textViewNetwork=0x7f070003;
public static final int toggleButtonGPS=0x7f070000;
public static final int toggleButtonNetwork=0x7f070001;
}
答案 0 :(得分:5)
这是一个非常普遍的问题。尝试并调用项目中的Project/Clean...
。有时会发生R
类的自动生成错误,这将迫使它们重建。
答案 1 :(得分:3)
一切都很好。
始终只需转到项目 - >清洁强> 并且而不是。 多数民众赞成。
答案 2 :(得分:1)
这不能回答你的问题。我怀疑A - Cs的评论是正确的。
但是,没有什么可以混淆的。 findViewById
非常简单。
编译应用程序时,编译器会生成R.java并为布局XML中的每个视图添加一行(以及字符串,绘图,颜色等 - 任何“资源”)并为其提供唯一ID。
public static final int toggleButtonNetwork=0x7f070001;
更改资源时ID会发生变化,但无关紧要。当您使用findViewById
时,您会为其指定“友好名称”,在本例中为R.id.toggleButtonNetwork
,由于0x7f070001
是一个静态常量,因此会将其编译为public static final int toggleButtonNetwork
。
当您从XML扩展视图时,通常使用setContentView,构建对象的视图层次结构。每个对象的id是R.java中的id。
findViewById
返回对View
类型对象的引用,然后将其转换为任何类型的View,这就是您使用的原因
= (Button)findViewById(R.id.toggleButtonNetwork);