android:使用ActivityGroup嵌入活动
Posted
技术标签:
【中文标题】android:使用ActivityGroup嵌入活动【英文标题】:android: using ActivityGroup to embed activities 【发布时间】:2011-03-16 23:14:19 【问题描述】:我正处于构建应用程序的概念化/设计阶段,但遇到了一些障碍。本质上,我正在寻找一种将一个活动嵌入到另一个 UI 中的方法,类似于 TabHost/TabActivity。屏幕顶部会有一个窗口,其中包含其他活动,在其下方是独立于上述活动且应始终可见的按钮和控件。用户将能够在窗口中从一个活动导航到另一个活动,而不会对以下控件进行任何更改。
在调查我遇到的 ActivityGroup 问题时,它看起来很有用,但我将如何实现它?任何人都有 ActivityGroup 的经验或有其他想法?
【问题讨论】:
【参考方案1】:是的,您将实现一个 ActivityGroup,它将成为您的其他活动的容器。当用户单击其中一个按钮时,您将获得对 LocalActivityManager 的引用,并使用它来启动并嵌入内部活动。像这样的:
LocalActivityManager mgr = getLocalActivityManager();
Intent i = new Intent(this, SomeActivity.class);
Window w = mgr.startActivity("unique_per_activity_string", i);
View wd = w != null ? w.getDecorView() : null;
if(wd != null)
mSomeContainer.addView(wd);
注意,使用这种方法可能会相当复杂,因为除非焦点恰到好处,否则按下硬件按钮(如菜单按钮)只会触发 ActivityGroup 而不是内部 Activity 上的事件。将内部活动添加到容器视图后,您必须找到某种方法来聚焦它,此时偶数将在内部活动中发生并传播到容器活动。
它可以做到,我已经做到了......而且它有效。它只是比我想象的要复杂一些。
无论如何,我通过查看 TabHost 代码获得了大部分信息,可以找到 here
【讨论】:
哦,太好了,我正在寻找 tabhost 源代码。这看起来不错,但对我来说都是全新的。愿意解释一下您在代码示例中所做的事情吗? startActivity 部分只是启动 Activity 而不在屏幕上显示它。然后,您将获得包含所有内容的视图并将其添加到您的 ActivityGroup 内的视图中。 LocalActivityManager 为您管理一切,例如当您按下主页按钮时向您的内部活动发送 onPause 和 onResume 等 还有一件事:这个“窗口”对象是什么,它是如何实现的?我可以在布局中放置一个<window>
标签,然后在代码中分配它吗? ps 谢谢,你太棒了。
想通了。你帮了大忙。谢谢以上是关于android:使用ActivityGroup嵌入活动的主要内容,如果未能解决你的问题,请参考以下文章
Android:AsyncTask ProgressDialog 不会在 ActivityGroup 中打开
继承的tabactivity怎么用appcompatactivity代替并实现tabactivity的的效果