java - Android - 选项卡、MapView、选项卡内的 Activity

标签 java android android-widget

我们正在编写一个具有 4 个选项卡的应用程序: map 、人物、地点、事件。应用程序中的人物、地点和事件在 map 上显示为图标。默认情况下,People、Places 和 Events 选项卡各自显示一个 ListView ,自定义呈现,分别显示所有 People、Places 和 Events。

alt text http://web6.twitpic.com/img/37202700-f92052dc474b74e1760edda1c47f6940.4adcb134-scaled.png

现在,现在每个选项卡都有一个 Intent 集作为其内容,以启动相应的 Activity 。例如,有一个扩展 MapActivity 的 MapTabActivity,一个显示人员的 ShowPeopleListActivity,等等。

我看到一个 lot of StackOverflow questions/answers 说由于 TabHost 设置方式的各种限制,最好不要使用 Activity 作为选项卡的内容。例如,不可能启动一个新 Activity 并用它代替选项卡中的现有 Activity ,但可以切换出具有不同 View 的 View 。

现在,我正处于十字路口。我们(无论好坏)投入了大量时间,试图让这个应用程序以其当前结构的方式工作,并将 Activity 作为选项卡的内容。单击对应于人物、地点或事件的图标时,它会在对应于该对象的 URI 上触发 VIEW Intent;这是由一个 Activity 拾取的,然后显示该对象。同样的机制在 Map 和单个列表中都在起作用。我们真的很喜欢它为我们提供的松散耦合;我们只需向人/地点/事件提供一个 VIEW 命令和 URI,它就会自动将我们带到正确的 Activity 。诚然,启动的 Activity 覆盖了选项卡 View 而不是出现在其中,但我们愿意接受这一点。

但这里有一个问题:我们希望能够从 Show Activity 返回到以那个人、地点或事件为中心的 map 。我们可以启动一个新的 Activity 来再次显示 map ,但是现在我们有 map Activity 作为选项卡的内容,加上显示 Activity ,再加上 Activity 堆栈中的新 map Activity ;考虑到 map Activity 的资源密集程度,我猜这不是理想的方式。

我想我的问题是,在某个地方是否有一个很好的教程确切地展示了如何使用 TabHost 执行复杂的任务?我看过HelloTabWidget ;我正在寻找比这更复杂的东西。我担心如果我们切换到基于 View 的做事方式,我们将不得不做很多内务处理来拦截所有的后台事件,尝试切换 View 等等,以及以我们不想要的方式强耦合我们的程序。

任何关于前进方向的建议都将不胜感激。我们是 Android 的新手,所以我们试图遵循既定的最佳实践,但是当我们看到的几个示例对于我们的用例而言过于简单时,这很难做到。

最佳答案

I see a lot of StackOverflow questions/answers saying that due to various limitations in the way the TabHost is setup, it's best NOT to use activities as the content of tabs.

作为反 Activity 标签联盟 (AATA) 的自封主席,这当然是我的立场。

When an icon corresponding to a Person, Place, or Event is clicked, it fires off a VIEW Intent on a URI corresponding to that object; this is picked up by an Activity that then shows the object.

请注意,这与将 Activity 作为选项卡的内容无关。

We can launch a new activity to show the map again, but now we have the map activity as the content of the tab, plus the show activity, plus the new map activity in the activity stack; given how resource intensive the map activity is, I'm guessing this is not the ideal way to go.

如果可能,我会避免它。

I'm worried that if we switch to the View based way of doing things, we'll have to do a LOT of housekeeping to intercept all the back events, try to switch out the views, etc., etc., as well as strongly coupling our program in a way we don't want.

这与您之前写的完全不符。您的“后台事件”在使用 View 作为选项卡的内容和使用 Activity 作为选项卡的内容之间不会改变一丁点。此外,这与您描述的“松散耦合”模式没有任何关系——单击选项卡 View 中列表中的图标与单击 Activity 中 View 中列表中的图标没有什么不同一个标签。

只需让您的 Show Activity 告诉您,嗯,主要 Activity 显示特定位置,然后 Show Activity 就可以 finish()。在不在 Activity 之间引入硬 JVM 耦合的情况下,最简单的方法是广播 Intent 并在主 Activity 中注册 BroadcastReceiver。收到此 Intent 后,主要 Activity 将更新 map 并将其设置为当前选项卡。当然,如果您让主 Activity 为其选项卡内容使用 View ,则此方法会更简单。

现在,如果您尝试彻底改造您的应用程序,以便在选项卡中导航不会启动另一个 Activity,而是将内容保留在它自己的选项卡中......那是一个完整的“鱼缸”。

关于java - Android - 选项卡、MapView、选项卡内的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1590340/

相关文章:

Android,保持 View

java - 如何在我的应用程序的登录页面中使用忘记密码

android - RemoteViewService Intent 上的 setData

Android Widget 没有响应

java - 访问与 jar 文件相邻的文件

java - 如何缩小 BufferedImage 的大小和质量?

java - 从一个类读取 Java 属性文件时没有这样的文件或目录,但从另一个类读取属性文件时没有这样的文件或目录

Android:每次单击标签栏项目时如何刷新 View ?

Android AppWidgetProvider 的 onReceive 方法永远不会被调用

java - PhoneGap - 请求 GPS 激活