2013-02-10 104 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);