2013-02-10 101 views
3

当谈到android开发时,我非常喜欢新手,所以请耐心等待。我目前正在使用Windows 8/Eclipse。新手困惑的Android的findViewById()函数?

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

清理您的项目? – 2013-02-10 17:50:35

+0

发布你的布局xml,你也在膨胀。是否存在“@ + id/toggleButtonNetwork”? – dnkoutso 2013-02-10 17:53:27

+0

R.java自动生成。你永远不需要看它,除非好奇。 Android会照顾管道。 – Simon 2013-02-10 17:53:32

回答

5

这是一个很常见的问题。试着在你的项目上调用Project/Clean...。有时候会发生R类的自动生成错误,这将迫使它们被重建。

3

Everthing很好。

永远只是去项目 - >清洁不是运行。 就是这样。

1

这并不回答你的问题。我怀疑A - Cs评论是正确的。

但是,没有什么可以混淆的。 findViewById非常简单。

编译应用程序时,编译器会生成R.java,并为布局XML中的每个视图添加一行(以及字符串,drawables,颜色等 - 任何属于“资源”的东西),并为其提供唯一的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型的,然后您可以转换为任何类型的视图是这就是为什么你使用

= (Button)findViewById(R.id.toggleButtonNetwork);