Android的findViewById()函数混淆了新手吗?

时间:2013-02-10 17:48:11

标签: android eclipse

对于Android开发来说,我是一个新手,所以请耐心等待。我目前正在使用Windows 8 / Eclipse。

我的问题是,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;
}

3 个答案:

答案 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);