ObA*_*bAt 8 android master-detail android-layout android-fragments navigation-drawer
我的应用程序使用多窗格布局来显示分配列表.每个Assignment都可以放在一个AssignmentCategory.我想使用DrawerLayout来显示所有AssignmentCategories,以便用户可以在diffirent类别之间轻松切换.
我没有设法创建这样的布局.在官方的DrawerLayout教程中,DrawerLayoutActivity取代了Fragment用户点击某个项目时(在我的情况下是一个AssignmentCategory).我遇到的问题是多窗格布局需要一个FragmentActivity.我不知道如何创建Fragment包含多窗格布局的内容.有人设法做到了吗?
将这两个项目结合起来应该不会太困难.在示例代码中,DrawerLayout 示例确实替换了内容片段,但您不必执行相同的操作,您只需更新相同的片段即可显示正确的数据.您可以通过这种方式实现这两个项目:
ActionBarActivity(v7),您不需要扩展FragmentActivityDrawerLayout在启动列表中的活动代码(从抽屉工程示例代码)(我假设你不希望DrawerLayout在细节上活动,但执行如果你想它不应该是一个问题).开始列表活动的布局将是这样的(不要忘记您还需要在其中实现DrawerLayout更改activity_item_twopane.xml!):
<DrawerLayout>
<fragment android:id="@+id/item_list" .../>
<ListView /> <!-- the list in the DrawerLayout-->
</DrawerLayout>
Run Code Online (Sandbox Code Playgroud)更改实现,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()]);
}
Run Code Online (Sandbox Code Playgroud)更新方法将是这样的:
/**
* 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;
}
Run Code Online (Sandbox Code Playgroud)
- 各种其他小变化
我已经制作了一个示例项目来说明您可以在此处找到的上述更改.
| 归档时间: |
|
| 查看次数: |
2933 次 |
| 最近记录: |