我有一个适用于基本主题“空白活动”的应用程序,我想做的是将其更改为“主/细节流”主题。我知道这将使我的应用程序在 android SDK 11 + (android 3.0 Honeycomb +) 上运行,这对我来说没问题。问题是我不知道从哪里开始,进行这种 BIG 转换的基本步骤是什么?我找不到任何例子来帮助我解决这个问题。我应该寻找什么。我相信这已经完成了,你至少能给我一些关于如何做到这一点的指导吗?我的应用程序并不复杂,它使用活动、异步任务、数据库、自定义列表……它非常基础。我使用自定义列表来显示数据,当我单击它时,它会显示更多详细信息,所以我想有什么比“主/细节流程”更专业的方法来做到这一点。如果您有任何关于“主/详细流程”的教程,您可以联系我,这可能会有所帮助。
5 回答
我有一个适用于基本主题“空白活动”的应用程序,我想做的是将其更改为“主/详细信息流”主题。
我认为改变应用程序流程比改变主题更合适。出现的两个明显问题是,您为什么突然想要进行此更改并确定您的应用程序在主/详细信息流中有意义?答案很可能是肯定的,但您仍然应该回答它们。
我知道这将使我的应用程序在 android SDK 11 + (android 3.0 Honeycomb +) 上运行,这对我来说没问题
我不明白为什么您的应用程序无法使用新的主/详细信息在以下版本上运行。
问题是我不知道从哪里开始,进行这种 BIG 转换的基本步骤是什么?我找不到任何例子来帮助我解决这个问题。我应该寻找什么。我相信这已经完成了,你至少能给我一些关于如何做到这一点的指导吗?
您尚未提供有关如何实施您的应用的详细信息。更改将围绕片段进行,因此一个大问题是当前的单窗格版本是否是使用片段框架构建的。
如果您的应用程序是使用片段构建的,那么进行更改应该不会太难。你需要:
- 确定哪些部分(片段)应该组合在一个活动中(从你的旧的)来制作主/细节(当空间允许的时候)
- 更改多窗格活动以适应新片段。这应该很容易做到,但这取决于每个片段所暴露的特征的大小。
- 修改其余的活动(当应用程序不会在多窗格模式下运行时),这将是小的变化,因为活动将主要保持当前版本
如果您的应用程序不是使用片段构建的,那么我上面所说的仍然适用,但您还需要实际制作所需的片段来包装您的应用程序具有的任何功能。这很可能会导致大的代码重构。
这是关于 Android 中的 Master/Detail 模板的教程 - An Android Master/Detail Flow Tutorial。
据我了解,您的应用程序已启动并正在运行 - 所以我不确定尝试重写它是否值得,除非您当然遇到了一些问题。:) 通常,主/详细信息流程需要以下步骤:
- 实现
ListFragment
显示您的项目的基本信息 - 实现
Fragment
显示有关特定项目的详细信息 - 为大型设备制作一个 xml 布局文件(例如,位于
layout-sw600dp
文件夹中)。在此布局中,您必须放置两个片段。 - 编写此布局文件的通用版本(即同名但位于
layout
文件夹中的文件),其中仅包含 ListFragment。 - 让您的活动处理
onItemClick
来自ListFragment
. 每次单击项目时,您都必须检查活动是显示两个片段还是仅显示ListFragment
. 如果两者都可见,则必须通知详细信息片段选择了新项目,以便它可以显示其数据。否则,您必须创建新的详细信息片段(当然可以重用它),将有关所选项目的一些信息传递给它(以便它可以显示项目的数据)并用ListFragment
新的替换。
这是一个基本的概述,但它应该足以让您对这个流程有所了解。如果您需要更多详细信息 - 请告诉我。:)
以下是 developer.android.com fragment-ui和adaptui的一些链接
这些是关于片段的一些指南,但它们是使用主/详细信息应用程序告知的。
另外不要忘记查看第二个链接中作为示例提供的新闻阅读器应用程序。
主/详细流程和空白活动与您只想通过更改应用程序主题或应用程序基本主题来更改不同。更好的是,如果您首先使用 UI 片段设计主/详细流模板,然后根据您的空白活动与主模板进行必要的更改集成。对于主/详细流程教程只需 google 一下,您会在那里找到很多示例。
如果您有最新版本的 Android SDK,您应该能够创建一个新的 Android 应用程序,并且在此过程中您可以选择让向导为您创建一个 Master/Detail Flow 应用程序。它将创建一个基本的工作应用程序,以便您可以查看代码并了解必要的部分。
然后,根据您的应用程序的简单程度,您可能希望将所有现有代码移动到新应用程序中,反之亦然。
将发生的宏观变化:
- 将您当前的所有活动更改为
extend Fragment
。 - 您必须创建一个 FragmentActivity 来调用您的 Fragments。这基本上是样板代码,只添加了片段的名称。
- 不要忘记仔细检查您的清单!
在之前扩展 Activity 的转换片段中:
- 在您需要上下文的任何地方,用它进行切换
getActivty()
(或创建一个全局变量以便它只被调用一次) 更改
onCreate()
为public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.inflate(R.layout.fragment_signals, container, false); setHasOptionsMenu(true); // Add if you want to display a Menu // Your initiation code here return mView; }
如果您有菜单,请将其更改为
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.activity_main, menu); super.onCreateOptionsMenu(menu, inflater); }
这就是基本应用程序。当你第一次将Activity改为Fragments时,会有很多错误。但是,它们都很容易修复。