具有主细节流的导航抽屉从不显示两个窗格

时间:2015-07-29 13:50:11

标签: android android-fragments navigation-drawer master-detail

我正在尝试在导航抽屉图案旁边加入一个主细节流程。我按照this answer中的说明进行操作。这适用于显示一个窗格,但是对于这些步骤,她的说明指出将相关代码添加到MainActivity,在我的例子中是NavigationDrawerActivity:

  

(5B)从ItemListActivity中复制onCreate的部分代码并粘贴它   在MainActivity中创建onCreate。这部分:

    if (findViewById(R.id.item_detail_container) != null) {
    // The detail container view will be present only in the
    // large-screen layouts (res/values-large and
    // res/values-sw600dp). If this view is present, then the
    // activity should be in two-pane mode.
    mTwoPane = true;

    // In two-pane mode, list items should be given the
    // 'activated' state when touched.
    ((ItemListFragment) getFragmentManager()
            .findFragmentById(R.id.item_list))
            .setActivateOnItemClick(true);
}
  

(5C)同样从ItemListActivity复制onItemSelected方法并粘贴   它进入MainActivity。您将拥有一个onItemSelected方法   如果你告诉Eclipse“添加未实现的方法”以响应   在步骤5A之后可能出现的错误。如果不这样做,请复制   整个方法。 (这个步骤是为了回答一个问题而编辑的   注释):

if (mTwoPane) {
    // In two-pane mode, show the detail view in this activity by
    // adding or replacing the detail fragment using a
    // fragment transaction.
    Bundle arguments = new Bundle();
    arguments.putString(ItemDetailFragment.ARG_ITEM_ID, id);
    ItemDetailFragment fragment = new ItemDetailFragment();
    fragment.setArguments(arguments);
    getFragmentManager().beginTransaction()
            .replace(R.id.item_detail_container, fragment)
            .commit();

} else {
    // In single-pane mode, simply start the detail activity
    // for the selected item ID.
    Intent detailIntent = new Intent(this, ItemDetailActivity.class);
    detailIntent.putExtra(ItemDetailFragment.ARG_ITEM_ID, id);
    startActivity(detailIntent);
}

这一行:

  

if(findViewById(R.id.item_detail_container)!= null){

始终为null。我认为我不需要在NavigationDrawerActivity的onCreate方法中使用它,因为在从我的导航菜单中选择该项之前不会创建master-detail片段,但我不确定在哪里放置它。我已经尝试在片段被替换并提交后放置它,但这似乎也不起作用。为清楚起见,我想要实现的是导航菜单,其中大多数片段将成为主要细节类型。如果有任何不清楚的地方,请告诉我。

1 个答案:

答案 0 :(得分:0)

您是否在项目中添加了横向布局? Android有 layout-land 资源文件夹,其中包含横向布局。

因此,您需要添加两个布局才能使用该过程。

布局资源文件夹包含要在正常方向使用的布局文件

layout-land 资源文件夹包含横向使用的布局文件

所以,

来自 res / layout

布局仅包含列表容器列表

来自 res / layout-land

布局将包括列表容器 item_detail_container

当没有 res / layout-land 时,Android会从 res / layout 获取横向方向的布局。并且您的布局不包括该视图。这就是为什么你的条件总是为空的。

如果使用包含两个视图的布局添加 res / layout-land ,它将解决您的错误。请检查您的样品。 :)

由于