使用导航抽屉更改片段(?)布局或活动

9
我正在尝试使用新的导航抽屉。我遵循了指南并成功让它工作,包括选中项目时更改部分名称标题等。现在我卡住了,因为我不知道如何实现我想要做的下一步。
当我点击抽屉中的一个项目 - 例如“主页” - 我希望它将我带到一个屏幕,其中我有所有我为特定屏幕创建的布局中的内容。这些都是静态的东西,如TextView和图像,所以我不需要对它们做任何事情。
我应该为抽屉的每个ListView项目创建一个活动和布局,并(还不知道如何)在onItemSelected()中启动活动吗?或者我可以在每次单击ListView中的项目时即时创建一个片段,并说类似于:
if(homeClicked){ //use home.xml as layout }
if(contactClicked){ //use contact.xml as layout }

编辑

作为一个测试,我在onItemClick()方法中加入了一个传递点击的数组位置的方法。作为测试,我只是简单地使用了:

if(position==2) { // this is "contact" in the list layout
  setContentView(R.layout.contacts);
}

它确实有效,但显然我失去了抽屉,因为联系人布局的内容未嵌套在DrawerLayout中。有没有更优雅的方法来实现我的目标,而不是使用switch来切换位置并使用setContentView(),修改任何布局以嵌套在DrawerLayout中?(我甚至不知道是否可能-可能不行,因为存在相等的ID)。
@Stefan编辑了这个,因为评论回复中没有足够的空间。
谢谢Stefan,Google的示例让我更加困惑。我确定关于片段有一个非常微小的诡计,我可能已经读了10k次,但我的大脑拒绝吸收。 据我所知,在Google的示例中,当您单击抽屉中的项目时,它会创建一个新的片段,并使该片段替换除MainActivity的XML布局中除抽屉ListView之外的唯一内容外,该内容是占据整个屏幕空间的FrameLayout。然后,所有片段都只显示一个行星ImageView,因此代码会告诉片段根据项目点击的ListView数组位置更改该图像。
2个回答

5

好的,这里有很多初学者问题,还有一个相当新的且未定义的问题。

首先,您可以通过以下方式启动新的Activity:

this.startActivity(new Intent(this, ActivityClassName.class)); 

从任何Activity(或Fragment,稍作修改即将'this'='this.getActivity()')

无论您使用的是Activity还是Fragment,您都必须创建一个类和一个相应的XML视图。您可以构建一些通用的东西,但大多数时候您不想这样做。

关于在抽屉菜单上单击后是否应启动新Activity或切换Fragment的问题,我认为这仍然很难说。

一般来说,最容易且最符合要求的方法就是启动新的Activity。因为一个Activity应该等同于一个可见的屏幕,可能有多个部分(它们可以是Fragments)。

然而,在实践中,您会看到越来越多的Google应用程序(Google音乐、Play商店、新版Gmail等)似乎放弃了这个想法,而是使用只不断切换Fragments的一个Activity。

从技术上讲,这种做法将Activity置于应用程序角色中,这可能会带来额外的困难。然而,从视觉上看,过渡更加流畅,例如,操作栏保持不变,这更符合Google喜欢的“锚定”思路。

然而,他们在教程中似乎是切换Fragments而不是启动Activities,因此也许您应该尝试这种方法,成为“新事物的前沿” :)

http://developer.android.com/training/implementing-navigation/nav-drawer.html


我是这个网站的新手,所以不知道编辑评论是否会以某种方式通知您。顺便说一下,由于评论空间不足,我已经编辑了主要帖子。 - kandros
Google的示例重复使用了相同的片段,但使用不同的参数来切换imageView。但是,您可以以相同的方式在switch语句中构建,并用完全新的Fragment替换Fragment,该Fragment具有自己的视图和逻辑。 - Stefan de Bruijn

0

真的很困惑,我相信Android工程师在这里错过了什么!

例如,在iOS上,您可以轻松地在窗口上拥有多个“UIViewController”,并为所有应用程序使用相同的菜单(或UITabViewController)。这是一个正常的行为,没有231个stackoverflow问题^^

但是在Android上,我看不到任何人有干净的解决方案来使用NavDrawer或Tab与Activies;-(

我将选择单个活动和几个片段的方法,让我们看看!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接