2016-05-25 1 views
-1

他のいくつかのクラスからクラスのインスタンスにアクセスしたいと思います。アクセスしたいクラスには、ユーザーが選択した設定を保持する必要があります。違うクラスのクラスにアクセスする私の方法は正しいですか? (Androidスタジオ、Java)

私のMainActivityでは、他のクラスからアクセス可能なクラスのインスタンスを作成します。

public static SettingsHolder holder = new SettingsHolder(); 

はその後、私はMainActivityから別のアクティビティを開始します。

クラスの設定を開きます
public void onSettings(View view){ 
     Intent i = new Intent(MainActivity.this, Settings.class); 
     startActivity(i); 
    } 

。設定ののonCreateメソッドでは私がしている:私は上記の設定のクラスから

private SettingsHolder holder; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.settings); 
    holder = MainActivity.holder; 
} 

は今、ホルダークラスからパブリック変数/メソッドを設定および取得することができるはずですか?私が尋ねる理由は、私がこれを行う方法を検索したときに、私はputExtrasgetExtrasのようなものを私のonSettingsメソッドで使用することを示唆したメソッドしか見つけなかったからです。

+0

ライブラリの機能を使用する代わりに、独自のSettingsHolderクラスを定義する理由を教えてください。例えば。私はあなたが 'SharedPreferences'を使って調べるべきだと思います。 – Elyasin

+0

私はまだ、SettingsHolderクラスでは、私はsharedpreferencesを使用してそのクラスのすべての変数を設定するメソッドを呼び出します。しかし、あなたは、私が設定ホールダークラスの新しいインスタンスを全く作成する必要はないと言っています、どうすればいいですか? – Taegos

+0

'SharedPreferences'クラスを直接使用してください。これはAndroidライブラリによって提供されています。なぜ、最後に同じことをするクラスを使うのですか?私はその理由を見ません。そのためのAndroidのドキュメントを読んでください。 – Elyasin

答えて

1

はい、これは別の方法では、SettingsHolderクラスに静的な参照を持たせることです。だから、SettingsHolder

は持っている:

public class SettingsHolder{ 

    public static SettingsHolder instance; 

    public SettingsHolder{ 

     if(instance == null) 
      instance = this; 
    } 

これは、あなたがそれを参照の周りに渡すことを心配する必要はなしに初期化された後、それはどこでもSettingsHolder.instanceを使用して参照することができます使用します。

+0

あなたはこれを行うことができます考えて、ありがとう! – Taegos

+0

これはとてもうまく動作し、シングルトン(パターン)と呼ばれると思います。 – Flummox

関連する問題