DrawerLayout和多窗格布局

我的应用程序使用多窗格布局来显示分配列表。 每个Assignment可以放在一个AssignmentCategory 。 我想使用DrawerLayout来显示所有的AssignmentCategories,这样用户就可以在不同的类别之间轻松切换。

我没有设法创build这样的布局。 在官方的DrawerLayout教程中 ,DrawerLayoutActivity在用户点击一个项目(在我的情况下是一个AssignmentCategory )时replace了一个Fragment 。 我面临的问题是多窗格布局需要一个FragmentActivity 。 我不知道如何创build一个包含多窗格布局的Fragment 。 有人设法做到这一点?

Solutions Collecting From Web of "DrawerLayout和多窗格布局"

结合这两个项目不应该太困难。 在示例代码中, DrawerLayout示例不会替代内容片段,但您不必执行相同的操作,只需更新相同的片段即可显示正确的数据。 你可以这样实现这两个项目:

  • 从多窗格演示项目开始。
  • 更新多窗格演示的两个活动来扩展ActionBarActivity (v7),你不需要扩展FragmentActivity
  • 在启动列表活动中实现DrawerLayout (来自抽屉项目的示例代码)代码(我假设你不想在细节活动中使用DrawerLayout ,但是实现它应该不是问题,如果你想的话)。
  • 启动列表活动的布局将如下所示(不要忘记,您还需要在DrawerLayout中实现DrawerLayout更改!):

     <DrawerLayout> <fragment android:id="@+id/item_list" .../> <ListView /> <!-- the list in the DrawerLayout--> </DrawerLayout> 
  • 更改实现DrawerItemClickListener以便当用户单击不创build的抽屉列表项并添加新的列表片段时,而是更新布局中的单个列表片段:

     AssignmentListFragment alf = (AssignmentListFragment) getSupportFragmentManager() .findFragmentById(R.id.item_list); if (alf != null && alf.isInLayout() && alf.getCurrentDisplayedCategory() != position) { alf.updateDataForCategory(position); // the update method setTitle(DummyContent.CATEGORIES[alf.getCurrentDisplayedCategory()]); } 
  • 更新方法是这样的:

     /** * This method update the fragment's adapter to show the data for the new * category * * @param category * the index in the DummyContent.CATEGORIES array pointing to the * new category */ public void updateDataForCategory(int category) { mCurCategory = category; String categoryName = DummyContent.CATEGORIES[category]; List<DummyContent.Assigment> data = new ArrayList<Assigment>( DummyContent.ITEM_MAP.get(categoryName)); mAdapter.clear(); // clear the old dsata and add the new one! for (Assigment item : data) { mAdapter.add(item); } } public int getCurrentDisplayedCategory() { return mCurCategory; } 

    各种各样的小变化

我已经做了一个示例项目来说明上面的变化,你可以在这里find 。