2011-12-23 29 views
4

庫項目看起來不錯,但只要將其導入到我的主項目中,它就會在每行引用資源時顯示錯誤:android庫項目:R.id無法解析或不是字段

ID不能得到解決或無法在現場

主要項目未顯示任何錯誤。

因爲我問自己,android知道從哪裏導入資源。在這樣的臺詞:

RelativeLayout menuLayout = (RelativeLayout) this.findViewById(R.id.menu_layout); 

但這既不工作:

RelativeLayout menuLayout = (RelativeLayout) this.findViewById(net.bla.library.R.id.menu_layout); 

什麼想法?

編輯:我發現了什麼是:

只要我包括庫項目時,Eclipse從庫中複製了根/ net.mylibrary.R到主應用程序(所以有2包中gen文件夾:來自應用程序的文件夾和從庫中複製的文件夾)。奇怪的是:R.id沒有在副本中找到。還有一些其他的不同之處,比如副本爲其定義使用了額外的「final」。

我真的不知道爲什麼會發生這種情況。有人?

+0

什麼是R定義爲? – 2011-12-23 17:16:09

+0

@SteveC作爲net.bla.library.R 至少那是當我將鼠標懸停在「R」日食說什麼。哦,只是發現:不知何故,eclipse在主項目「gen」目錄中也創建了一個「庫」目錄,所以庫「R」被主應用程序「R」取代。 pfuh,很難形容。不幸的是,當我嘗試刪除「庫」目錄時,eclipse立即重新生成它:/ – stoefln 2011-12-23 17:27:24

+0

在Java/Build Path/User Libraries中添加了jar文件嗎? – 2011-12-23 17:50:43

回答

2

檢查資源是否在res文件夾內。所有的資源必須在裏面。

  • 0 Proyect
    • 0.1 SRC
    • 0.2 RES
      • 0.2.1佈局
        • 0.2.1.1 main.xml中
        • 0.2.1.2 menu_layout.xml
      • 0.2.2 drawables .....

也許你是把數據項目文件夾中。

+0

這是一個「圖書館項目」的問題。該項目在我用作庫之前工作得很好。看到截圖:http://postimage.org/image/oxmt18hi9/ – stoefln 2011-12-23 18:42:52

5

Eclipse有時會喜歡導入android.R,這會導致類似於您遇到的錯誤。

在文件頂部查找導入,然後將其刪除。

,因爲它是在「Using Eclipse | Android Open Source」說:

注:Eclipse中有時喜歡在你的文件使用的資源,尤其是當你問蝕進行排序或以其他方式頂部添加一個導入android.R聲明管理進口。這會導致你的製造破裂。注意這些錯誤的導入語句並刪除它們。

+0

謝謝,但這並沒有改變任何東西 – stoefln 2011-12-23 18:41:36

2

我有一個類似的問題,我設法解決這個問題。 這裏是我做過什麼: 當我打電話給我的庫項目的主要活動,該活動的onCreate方法調用的setContentView方法和使用R.layout.main作爲參數。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    requestWindowFeature(Window.FEATURE_NO_TITLE);   

    setContentView(R.layout.main); 
    Button btn = (Button) findViewById(R.id.main_button1); 
    btn.setOnClickListener(this); 

findViewById返回null。 似乎庫項目的main.xml正被主項目的main.xml重寫。 所以我簡單地創建了一個新的xml佈局main_libname.xml,其內容與庫的main.xml相同,並將此佈局用作setContentView的參數。 它確實工作!

+0

工作的唯一答案!謝謝 – tieorange 2016-11-11 20:22:15

0

,我也對在庫項目中定義一個R.id項目的「找不到符號變量...」錯誤。值得注意的是,即使其他R域(例如R.layout)清晰可見,只有R.id符號在主項目中不可解析。

幸運的是,我能在一個解決方案偶然發現。事實證明,在我的情況下,我有一個資源(佈局文件)在我的主項目中定義,其名稱與庫項目中的名稱完全相同。

這是這是什麼樣子的文件系統明智:

top_level_project 
    main_android_proj 
     src 
      main 
       res 
        layout 
         activity_main.xml 
    android_library_subproject 
     src 
      main 
       res 
        layout 
         activity_main.xml 

我子項目的activity_main.xml中有一個像一個id這樣:

<RelativeLayout....> 
    <TextView android:id="@+id/special_text" ... /> 
</RelativeLayout> 

這是我嘗試引用ID在我的主要項目的Java代碼:

MainActivity.java: 

    public void onCreate() { 
     setContentView(R.layout.activity_main); 
     TextView tv = (TextView) findViewById(R.id.special_text); 
     tv.setText("Hello Android"); 
    } 

要解決此問題,我重命名在我的有問題的文件主要項目到別的東西。

看來,你不能在你的資源重複的佈局的名稱。 事實上,sdk docs也指出,你應該使用庫項目時要小心資源名稱衝突:由於工具合併庫 的資源

  • 資源衝突

項目與依賴應用程序項目的項目相關聯,可能會在兩個項目中定義給定的 資源ID。在這種情況下,工具 將從應用程序中選擇資源,或者選擇最高優先級爲 的庫,並丟棄其他資源。在開發您的應用程序時,請注意,在多個項目中定義的公用資源ID可能爲 ,並且將合併,應用程序或最高優先級庫中的資源 優先。