2012-03-16 11 views
6

私はアンドロイドアプリを開発中です。 私はそれにいくつかの活動をしています。そして、私はすべての活動から利用可能なオブジェクトを持っていなければなりません。 どのようにそれを整理するためのアイデア?アンドロイドアプリのグローバルオブジェクト

+0

「グローバルオブジェクト」とはどういう意味ですか?アプリケーション全体で利用可能なクラスを意味する場合は、このスレッドを見てくださいhttp://androidforums.com/developer-101/124278-global-objects.html – evilone

+0

私の状況では、いくつかのクラスのオブジェクトでなければなりません。すべてのアクティビティで、このオブジェクトのメソッドを使用し、オブジェクトのフィールドにデータを追加する必要があります。 – mmmaaak

答えて

11

は、次のようにグローバルApplicationオブジェクトを使用し

App globalApp = (App) getApplicationContext(); 

Appクラスがなりますアプリケーションの起動時に自動的にインスタンス化されます。申請プロセスが生存している限り利用可能になります。これは、あなたが物事を置くことができ、アプリケーションライフタイムを通じてそれらにアクセスできるグローバルストアとして機能することができます。

+0

これにいくつかのタイプミスがあるような気がしますが、修正すべきものはわかりません!:) –

+1

修正されたタイプミス。私が何かを見逃している場合は、お気軽にコメントしてください。 –

+0

あなたの初期クラス定義は 'GolbalObject'ですが、あなたの使い方は' GlobalObject'です。 –

3

これを行う方法はいくつかあります。共有したいオブジェクトがString(またはStringで簡単に記述されている)の場合は、Shared Preferencesをお勧めします。これは、アプリケーション内でデータを共有するためのキーバリューストアとして機能します。

これが当てはまらない場合(つまり、文字列の適性)は、さまざまなアクティビティを起動するインテントで余分に渡すことを検討できます。例えば:この戦略の詳細については

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

(特にバンドルクラスについて、あなたは慣れていない場合)、私はthis Android docを読んでいました。 Activityからアクセスするには

<application android:name=".App"> 

AndroidManifest.xml

package com.yourpackagename; 

public class App extends Application { 
} 

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(); 

は値を取得するには追加または編集するには

+0

これは、ポスターが共有したいオブジェクトがStringであることを前提としています。これは良い仮定である場合とそうでない場合があります。おそらく、 "最高の"解決策は、Object x = new Object(y.toString())などのtoStringとコンストラクタを持つことです。 は、yと等価なxを与えますか? – mfrankli

+0

私は実際のオブジェクトの代わりにオブジェクトの属性が必要だと思います。意図を超えてオブジェクトを渡すことも良い方法ですが、それを送信して処理するコードは複雑です。 – PhatHV

0

まず、Activityを拡張してグローバルオブジェクトを定義する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を拡張することにより、すべての活動にあなたのオブジェクトを使用することができるようになりますアクティビティの代わりに

関連する問題