2014-03-12 35 views
0

我想在我的所有Activities而不是片段)中創建Navigation Drawer在活動之間使用常用導航抽屜

棘手的部分是它應該是一個普通的抽屜。即列表項目必須相同。 在抽屜中,當前打開的活動應突出顯示爲在ListView中禁用的粗體&,而其他活動應爲正常文本且已啓用。

要通很多例子,像this之後,我拿出2點的方法:

  1. 要麼做出不同的抽屜式導航與同 ListView每個活動和動態讓當前打開的列表項大膽 &已禁用。或者,

  2. 正如上面的鏈接提到,使用BaseActivity,定義DrawerLayout那裏和其他活動中使用它。 (問題是,不知何故,我不會在BaseActivity setContentView(layout),這感覺不對使用活動的佈局,不會在任何位置顯示)

請建議

謝謝

+0

抽屜中物品的常見用例是在託管抽屜的活動中打開某個片段。如果您打開一個活動,那麼您應該在該活動中顯示Up插入符號,以證明您處於子活動中,並且可以在層次結構中進行導航。因此,在該活動中顯示抽屜會導航錯誤。 – Egor

+0

您可以在子類實現的BaseActivity中有一個抽象getLayoutId()函數。只要你創建的每個佈局具有相同的DrawerLayout id,那麼它就可以工作。由於時間限制,我只使用這樣的解決方案來更新應用程序的UI,而不進行完全重寫。我對此感覺不好。 @埃戈爾對你想要做的事情的問題性質提出了很好的觀點。 – jjhorgan

+0

@jjhorgan getLayoutID()方法會做什麼?你可以請示例解釋(可能作爲答案)。 – collin

回答

0

讓子類的活動,提供內容視圖佈局ID。

public class BaseActivity extends Activity{ 

     public void onCreate(Bundle b){ 
       super.onCreate(b); 

       setContentView(getLayoutId()) 

       //set up drawer content here 

    } 



     protected abstract int getLayoutId(); 
} 

public class AppActivity extends BaseActivity{ 

    public void onCreate(Bundle b){ 

     super.onCreate(b) 

     //do not call setContentView in this subclass let the super class do that 

     //set up activity specific content here 
    } 

    public int getLayoutId(){ 
     return R.layout.subactivity_layout; 
    } 
} 

爲了正確工作,每個活動的佈局必須包含相同的DrawerLayout元素。具體來說,抽屜佈局的id值和用作抽屜內容的子視圖在每個文件中必須相同。由於android不支持佈局文件中的繼承,這意味着在每個活動的佈局xml中都有重複的元素。您可以使用<merge>標籤將項目中的現有佈局包含到新佈局文件中。