2014-05-06 20 views
0

作爲我正在開發的應用程序的一部分,我試圖獲取對ActionBar的容器視圖的引用。我使用了this question的答案,只要所涉及的Android設備運行API級別11或更高,它就可以很好地工作。但是,應用程序需要在API級別9(目標API級別爲19)的基礎上工作,並且薑餅設備給我帶來了問題。我最初使用Sherlock進行該項目,但最近改用了v7 compat庫。我可以在薑餅設備(按鈕工作等)上以常規方式查看並與操作欄進行交互,但在嘗試獲取容器時失敗。我正在使用的代碼是這樣的(注意 - 它的ActionBarActivity一個子類中運行):獲取v7兼容ActionBarContainer

private FrameLayout getActionBarContainer() { 
    FrameLayout result = null; 

    int resId = getResources().getIdentifier("action_bar_container", "id", "android"); 
    try { 
     result = (FrameLayout)getWindow().getDecorView().findViewById(resId); 
    } 
    catch (Exception e) { 
     // If we get an exception, just eat it 
    } 

    return result; 
} 

要回答幾個問題,他們會被問到之前:

  1. 渣油解析爲一個正確的ID值在v11設備上運行,但在v11之前的設備上解析爲0。
  2. 使用此代碼有適當的檢查來處理空結果,這就是爲什麼我只是吃例外。 try/catch塊大多隻是在那裏,由於一些怪異的發生,ClassCastException設法得到拋出(它永遠不應該,因爲容器是FrameLayout的子類)。
  3. 我檢查並重新檢查了我的進口;我所有的ActionBar引用(以及所有相關的東西,比如我正在擴展的ActionBarActivity超類)都是v7 compat庫版本,而不是標準庫版本。
  4. action_bar_container ID應存在於v7 compat庫中,if this is any indication

我在這一點上大概沒有想法。有沒有簡單的我失蹤?任何建議,將不勝感激,如果你需要更多的上下文/澄清,讓我知道。

回答

4

,我認爲你的錯誤是對

int resId = getResources().getIdentifier("action_bar_container", "id", "android"); 

最後一個參數對於API級別< 11包應該是您的應用程序包,而不是plataform的包「機器人」

+0

你,先生,是一個紳士和學者。這完美地完成了這個技巧。謝謝! – Alex

相關問題