【问题标题】:Best approach for accessing activities from another访问他人活动的最佳方法
【发布时间】:2015-08-12 23:00:48
【问题描述】:

我正在开发一个简单的家用启动器。主要活动是主页布局,其中有一个按钮可以调用另一个活动以显示应用程序列表。在第二个活动中,如果您长按一个图标,它会添加到主屏幕。 因此,从第二个活动(应用程序列表)中,我将一个图像视图添加到主活动(主屏幕),但要做到这一点,我需要获取主布局,这是不可能从不同于自身的活动中获得的。

为了实现这一点,我正在考虑这样的不同选择:

1-在第二个活动中声明一个变量:

public static RelativeLayout mainLayout;

设置在第一个:

// MainActivity
Intent i = new Intent(this, DrawerActivity.class);
DrawerActivity.mainLayout = (RelativeLayout)findViewById(R.id.mainlayout);
startActivity(i);

2-使用片段避免活动之间的跳转。

3-更改主Activity中的布局(一个Activity换两个布局)。

4-声明从 Application 派生的类并在此处存储我在不同活动中需要的所有内容。

5-使用广播公司。

问题是:实现这一目标的正确方法是什么? 我已经阅读了几个文档,但没有明确的答案。

【问题讨论】:

    标签: android android-layout android-activity layout


    【解决方案1】:

    绝对不要选择选项 1。这是泄漏内存和上下文的最佳方式,您不希望这样。与 Activity 关联的资源(在这种情况下为布局)应该是该 Activity 的私有资源。这确保了框架可以按照设计的方式管理内存。

    Activity之间的通信,官方的方式是在启动Activity的intent中传递参数。您可以将要添加到主屏幕的应用程序的标识符添加到主屏幕,然后从意图(如链接中所示)或如果为结果启动第二个活动,则在 onActivityResult 方法中检索图像您的家庭活动。

    但是,在您的情况下,我会建议另一种方法。由于您必须保留主屏幕的布局,我将创建一个数据库表,其中包含添加到主屏幕的应用程序的位置。我会在方便的地方修改数据库条目,并在每次基于数据库显示时重建主屏幕的布局。

    【讨论】:

    • 这是一个很好的方法,但它并不完全是我想要/喜欢的。在 Delphi/Lazarus 中,您可以从任何地方访问所有表单,为什么在 Android 中不能这样做?
    • Android 是一个托管环境,平台不保证 Activity 中分配的任何资源在 Activity 离开屏幕后都可以访问。这是一个在任何情况下都应该响应的移动操作系统,这需要一些牺牲。
    • 我建议从基础开始,Android 不是桌面或网页,甚至不同于其他移动平台。你必须改变你的心态来创建应用程序。你不应该仅仅为了以你过去的方式开发而违反平台,它可能在大多数情况下都可以工作,但在某些情况下它不会很难重现错误并修复它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 2011-07-18
    • 1970-01-01
    • 2012-07-07
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多