2015-05-29 80 views
0

我正在開發一個簡單的家庭啓動器。主要活動是家庭佈局,其中有一個按鈕可以調用另一個活動來顯示應用程序列表。在第二項活動中,如果您長按一個圖標,則會添加到主屏幕。 因此,從第二個活動(應用程序列表)中,我添加一個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使用廣播機構。

問題是:哪種方法可以實現這一目標? 我讀過幾篇文檔,但沒有明確的答案。

回答

0

絕對不要選擇1.這是泄漏內存和上下文的最佳方式,而且您不希望這樣做。與活動相關的資源(在這種情況下是佈局)應該是該活動的私有資源。這確保框架可以按照設計的內存管理內存。

要在活動之間進行溝通,官方的方法是在啓動活動的intent中傳遞參數。您可以添加要添加到主屏幕的應用程序的標識符,並且可以從意圖中檢索圖像(如鏈接中所示),或者如果爲結果啓動第二個「活動」,則在您的onActivityResult方法中家庭活動。

但在你的情況下,我會建議另一種方法。由於您必須堅持主屏幕的佈局,因此我會創建一個數據庫表格,其中包含添加到主屏幕的應用程序的位置。我會在方便的地方修改數據庫條目,並根據數據庫每次顯示時重新構建主屏幕的佈局。

+0

這是一個很好的方法,但它不完全是我想要/想要的。在Delphi/Lazarus中,您可以從任何地方訪問所有表單,爲什麼不能在Android中執行相同的操作? –

+1

Android是一個託管環境,該平臺不保證在活動離開屏幕後,任何分配在活動中的資源都將被訪問。這是一個移動操作系統,在任何情況下都應該有所響應,這需要一些犧牲。 –

+0

我建議從基礎開始,Android不是桌面或網頁,甚至與其他移動平臺不同。你必須改變你的想法來創建應用程序。你不應該違反平臺,只是爲了以你慣常的方式進行開發,它可能適用於大多數情況,但在這種情況下它不會很難重現錯誤並修復它們。 –

相關問題