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

时间:2013-06-06 11:04:32

标签: android fragment drawer

我正在尝试使用新的导航抽屉。我按照指南进行了操作,并设法使用章节名称标题更改所选项目等等。现在我被卡住了,因为我不知道如何归档我接下来要做的事情。

当我点击抽屉中的项目 - 主页时,例如 - 我希望它将我带到一个屏幕,其中我拥有我在特定屏幕的特定布局中创建的所有内容。它是所有静态的东西,如TextViews和图像,所以我不需要对它们做任何事情。

我是否应该为抽屉的activity上的每个项目创建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,谷歌的例子让我更加困惑。我敢肯定,有一些关于片段的偷偷摸摸的东西,我可能已经阅读了10k次,但我的大脑拒绝同化。 据我所知,在谷歌的例子中,当你点击抽屉中的一个项目时,它会创建一个新的片段,并使这个片段替换ListView中抽屉MainActivity以外的唯一内容。 xml布局,它是占用屏幕所有空间的FrameLayout。然后所有片段都会显示一个行星ImageView,因此代码会根据项目点击的ListView数组位置对片段进行更改。

2 个答案:

答案 0 :(得分:5)

Oke,这里有许多初学者问题,还有一个非常新的和未定义的问题。

首先,你只需要开始一个新的活动;

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

从任何活动(或片段,有点改为'this'='this.getActivity()')

无论您使用活动还是片段,您都必须创建一个类和一个所属的xml视图。 你可以建立一些通用的东西,但大多数时候你不想这样做。

关于如果你应该启动一个新的活动,或者在点击抽屉后切换碎片的问题,我会说这仍然很难说。

一般来说,开始一项新活动是最容易和最“应该”的。因为活动应该等于可见的屏幕,可能有多个部分(可能是片段)。

然而,在实践中,您会看到越来越多的Google应用(Google音乐,Play商店,新版Gmail等)似乎放弃了这个想法,并使用1只能不断切换片段的活动。

从技术上讲,这种将Activity置于应用程序角色中会带来额外的困难。 然而,在视觉上,过渡更平滑,因为,例如,动作栏保持不变,就像谷歌更喜欢它的“锚”。

然而,似乎他们正在教程中切换片段而不是开始活动,所以也许你应该尝试这种方式并处于“新的做事方式”的最前沿:)

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

答案 1 :(得分:0)

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

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

但是在Android上,我看到没有人有一个干净的解决方案来使用NavDrawer或Tab with Activies; - (

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