【发布时间】:2012-07-25 07:26:02
【问题描述】:
我正在开发一个针对平板电脑和 Google TV 的应用程序。它将像许多标准的 Google TV 应用程序一样,带有一个 LeftNavBar 和一个所有应用程序屏幕通用的顶部搜索栏。它将类似于下图:
主屏幕
所有其他屏幕的红色区域都会有所不同。它可能包含以下屏幕模型之类的数据:
Activity One 加载到主容器中
Activity 2 加载到主容器中
所以你可以看到在主区域可以加载完全不同的部分。
在选择屏幕 2 中的任何列表项时(例如在片段列表中),屏幕 3 可以作为详细部分加载,也可以通过选择选项卡(将出现在 LeftNavBar 中)加载。
这是我尝试实现它的方式。
第 1 步。我使用以下 XML 创建了一个主 Activity:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#9ccc" >
<!-- Top Bar -->
</LinearLayout>
<FrameLayout
android:id="@+id/mainContainer"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<!-- main Red Container that will load other Activities -->
</FrameLayout>
</LinearLayout>
mainContainer 是我要加载活动的 RED 容器。 LeftNavBar 将作为 All 的父级添加到此 Activity。
第 2 步我创建了 ActivityOne 和 ActivityTwo,其中分别包含两个和三个 Fragment(如上图第二和第三张图片所示)。
*第 3 步 我正在尝试在主页的 mainContainer FrameLayout 中加载ActivityOne...但我无法添加它。
我尝试将ActivityOne 添加到mainContainer,如下所示:
View v = (new ActivityOne()).getWindow().getDecorView();
FrameLayout mainContainer = (FrameLayout) findViewById(R.id.mainContainer);
mainContainer.addView(v);
但是getWindow() 返回null....
发生其他问题是因为所有数据都来自远程服务 ..所以还请建议我如何能够以某种方式保存对 mainContainer 中所有已加载活动的引用stack ...所以我可以重新加载已经加载的活动,而不是创建它的新实例。这将在按下 BACK 按钮时使用。
或
我应该创建两个活动,每个活动都有自己的片段和一个 LeftNavBar,而不是将活动加载到上述 RED 容器中。这可能比上述方法更容易。或者这可能是唯一的解决方案....但是我觉得为 BACK 按钮保存状态可能会变得混乱..但我会尝试实现这个
如果您必须创建这种类型的应用程序,您会怎么做? 您将如何设计 UI 布局以获得最佳性能/实践?
非常感谢您在帮助我设置此应用的布局方面提出的建议。
【问题讨论】:
-
你能压缩你的代码,上传到某个地方并发送一个链接吗?你永远不能实例化一个活动,框架会这样做。我不知道 ActivityOne 是否实际上是您代码中的 Activity。浏览 Panoramio for Google TV 示例应用程序。它会做你打算在这里做的事情。
-
感谢您的回复。我查看了 Panoramio 示例应用程序。它有两个活动,它们包括活动的 onCreate() 事件中的 LeftNavBar。如果这是在所有活动中包含 LeftNavBar 的正确方法,我会这样做。我试图找到一种替代方式,因为我的应用程序中有很多活动(7-10)。就是这样,我正在尝试上述方法.. 使用 LeftNavBar 进行父活动并将其他活动/片段加载到某个主容器中。
标签: android android-layout android-fragments google-tv