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 中打开

Android 活动组使用

继承的tabactivity怎么用appcompatactivity代替并实现tabactivity的的效果

ActivityGroup window bad token问题深入分析

在主活动中嵌入外部意图

ActivityGroup中EditText无法删除的问题