草庐IT

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

coder 2023-09-01 原文

我们正在编写一个具有 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/

有关java - Android - 选项卡、MapView、选项卡内的 Activity的更多相关文章

  1. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  2. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  3. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  4. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  5. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  6. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  7. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  8. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  9. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  10. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

随机推荐