我正在开发一个简单的家庭发射器。主要活动是家庭布局,其中有一个按钮可以调用另一个活动来显示应用列表。在第二个活动中,如果长按一个图标,它会添加到主屏幕。 因此,从第二个活动(应用程序列表),我将一个imageview添加到主要活动(主屏幕),但为了做到这一点,我需要获得主要布局,这是不可能从不同于自身的活动。< / p>
为实现这一目标,我想到了不同的选择:
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 - 声明从Application下载的类,并在此处存储我在不同活动中需要的所有内容。
5-广播公司的使用。
问题是:实现这一目标的正确方法是什么? 我已经阅读了几篇文档,但没有明确的答案。
答案 0 :(得分:0)
绝对不要使用选项1.这是泄露内存和上下文的最佳方式,而你并不想要这样做。与Activity关联的资源(在本例中为布局)应该是该Activity的私有资源。这可以确保框架可以按照设计来管理内存。
要在活动之间进行通信,官方方式是传递启动活动的intent中的参数。您可以将要添加的应用程序的标识符添加到主屏幕,然后从意图中检索图像(如链接中所示),或者如果为结果启动了第二个Activity,则在{{3}中你家的活动方法。
但是在你的情况下,我建议采用另一种方法。由于你必须坚持主屏幕的布局,我会创建一个数据库表,其中包含添加到主屏幕的应用程序的位置。我会修改方便的数据库条目,并在每次根据数据库显示时重建主屏幕的布局。