Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从另一方访问活动的最佳方法_Android_Android Layout_Android Activity_Layout - Fatal编程技术网

Android 从另一方访问活动的最佳方法

Android 从另一方访问活动的最佳方法,android,android-layout,android-activity,layout,Android,Android Layout,Android Activity,Layout,我正在开发一个简单的家用发射器。主活动是主布局,其中有一个按钮可调用另一个活动以显示应用程序列表。在第二个活动中,如果长按图标,它将添加到主屏幕。 因此,从第二个活动(应用程序列表)中,我向主活动(主屏幕)添加了一个imageview,但要做到这一点,我需要获得主布局,这是不可能从不同的活动中获得的 为了实现这一点,我考虑了如下不同的选择: 1-在第二个活动中声明变量: public static RelativeLayout mainLayout; 在第一个选项中设置它: // MainAc

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

为了实现这一点,我考虑了如下不同的选择:

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

public static RelativeLayout mainLayout;
在第一个选项中设置它:

// MainActivity
Intent i = new Intent(this, DrawerActivity.class);
DrawerActivity.mainLayout = (RelativeLayout)findViewById(R.id.mainlayout);
startActivity(i);
2-使用片段避免活动之间的跳跃

3-更改主活动中的布局(一个活动对应两个布局)

4-从应用程序中声明类,并将我在不同活动中需要的所有内容存储在这里

5-使用广播公司

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

绝对不要选择选项1。这是泄漏内存和上下文的最佳方式,您不希望这样。与活动(在本例中为布局)关联的资源应该是该活动的私有资源。这确保了框架能够按照设计的那样管理内存

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


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

这是一个好方法,但这不是我想要/喜欢的。在Delphi/Lazarus中,您可以从任何地方访问所有表单,为什么不能在Android中执行相同的操作?Android是一个托管环境,平台无法保证在活动离开屏幕后可以访问分配在活动中的任何资源。这是一个在任何情况下都应该响应的移动操作系统,这需要一些牺牲。我建议从基础开始,Android不是桌面或web,甚至不同于其他移动平台。你必须改变你的思维方式来创建应用程序。您不应该仅仅为了按照以前的方式开发而违反平台,它可能在大多数情况下都可以工作,但在这种情况下,它将不会产生错误并修复它们。