将这两个项目结合起来应该不会太困难。在示例代码中,该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;
}
-其他各种小变化
我制作了一个示例项目来说明您可以在此处找到的上述更改。