2012-03-16 71 views
6

對象我正在開發一個Android應用程序。 我有一些活動。我必須有一個可以從所有活動中獲得的物體。 任何想法如何組織它?全球Android應用

+0

什麼叫「全局對象」呢?如果你的意思是一類可在整個應用程序,然後再看看這個線程http://androidforums.com/developer-101/124278-global-objects.html – evilone 2012-03-16 06:21:02

+0

在我的情況一定是某個類的一個對象。在所有的活動中,我必須使用這個對象的方法,將數據添加到對象的字段等等。 – mmmaaak 2012-03-16 13:18:14

回答

11

使用全球Application對象以下列方式:

package com.yourpackagename; 

public class App extends Application { 
} 

AndroidManifest.xml

<application android:name=".App"> 

要從Activity訪問:

App globalApp = (App) getApplicationContext(); 

App類將是應用程序啓動時自動實例化。只要申請流程有效,它就可以使用。它可以作爲一個全球商店,您可以在其中放置自己的東西,並在整個應用程序生命週期中訪問它們。

+0

我覺得這裏有一些拼寫錯誤,但我不知道要糾正哪些錯誤!:) – 2014-11-13 16:23:37

+1

更正了錯別字。如果我缺少任何東西,請隨時發表評論。 – 2014-11-14 06:13:31

+0

您的初始類定義是'GolbalObject',但您的用法是'GlobalObject' .. – 2014-11-14 14:22:32

3

有幾個方法可以做到這一點。如果你想分享的對象是一個String(或者很容易用String描述),我會推薦Shared Preferences。它用作在應用程序內共享數據的關鍵值存儲。

如果不是這種情況下(即一個字符串的適用性),你可以考慮將它作爲一個額外的與啓動您的各種活動的意圖。例如:

Intent newActivity = new Intent(CurrentActivity.class, ActivityToLaunch.class); 
newActivity.putExtra("object_key", Bundle_With_Your_Object); 

有關此策略的詳細信息(尤其是關於包類,如果你不熟悉),我會讀this Android doc

1

您可以使用SharedPreferences在這種情況下:

添加或編輯:

SharedPreferences prefs = this.getSharedPreferences("Cusom Name", Activity.MODE_PRIVATE); 
prefs.edit().putString("your_key", value).commit(); 

要清除:

SharedPreferences prefs = this.getSharedPreferences("Cusom Name", Activity.MODE_PRIVATE); 
prefs.edit().clear(); 

中獲取價值:

SharedPreferences prefs = this.getSharedPreferences("Cusom Name", Activity.MODE_PRIVATE);    
String value = prefs.getString("your_key", ""); 
+0

這假設海報想要分享的對象是一個字符串,這可能是也可能不是一個好的假設;雖然,也許「最好」的解決方案是有一個toString和構造函數,使得Object x = new Object(y.toString()); 會給出一個相當於y的x? – mfrankli 2012-03-16 06:39:55

+0

我認爲他需要對象的某些屬性而不是真實的對象。通過意圖傳遞對象是另一種好方法,但發送和處理它的代碼很複雜。 – PhatHV 2012-03-16 06:46:27

0

首先,創建一個名爲MasterActivity類延伸活動,並確定您的全局對象。

public class MasterActivity extends Activity 
{ 
    public Object mObject; 
} 

然後,你必須與你的MasterActivity擴展您的主要活動類喜歡它:

// your main activity 
public class MainActivity extends MasterActivity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     // you can now use mObject in your main class 
     mObject.yourmethod(); 
    } 
} 

通過這種方式,您將能夠簡單地通過擴展MasterActivity使用你的對象在所有的活動而不是活動。