8

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

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

4

1 回答 1

7

将这两个项目结合起来应该不会太困难。在示例代码中,该DrawerLayout 示例确实替换了内容片段,但您不必这样做,您可以简单地更新相同的片段以显示正确的数据。您可以通过这种方式实现这两个项目:

  • 从多窗格演示项目开始。
  • 将多窗格演示的两个活动更新为扩展ActionBarActivity(v7),您不需要扩展FragmentActivity
  • 在开始列表活动中实现DrawerLayout(抽屉项目中的示例代码)代码(我假设您不希望DrawerLayout在详细信息活动中使用,但如果您愿意,实现它应该不是问题)。
  • 开始列表活动的布局将是这样的(不要忘记您也需要实现DrawerLayout更改activity_item_twopane.xml!):

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

    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;
    }
    

    -其他各种小变化

我制作了一个示例项目来说明您可以在此处找到的上述更改。

于 2013-10-31T12:32:42.443 回答