3

在 android 开发方面我是一个新手,所以请多多包涵。我目前使用的是 Windows 8 / Eclipse。

我的问题是,该findViewById功能似乎已经发疯了,尽管我很可能错误地使用它。

该应用程序运行良好,然后我TextView在页面上“删除”了一些新的 s,这似乎完全混淆了它。

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

3 回答 3

5

这是一个相当普遍的问题。Project/Clean...尝试在您的项目上调用。有时会发生R类的自动生成出错,这将迫使它们被重建。

于 2013-02-10T17:54:35.063 回答
3

一切都很好。

总是只是去project -> clean不是 run。就是这样。

于 2013-02-10T17:56:01.083 回答
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返回对 type 对象的引用,View然后将其转换为 View 的任何类型,这就是您使用的原因

= (Button)findViewById(R.id.toggleButtonNetwork);
于 2013-02-10T18:02:02.817 回答