しばらくの間、私を悩ませてきた質問があります。あるアクティビティから別のアクティビティにデータを取得するための正規の、またはベスト プラクティスと見なされる手段を知りたいです。私は個人的にこれを行う2つの方法を認識しています。最初の方法は、putExtra() 関数 (または同様のもの) を介して、データを Intent に直接バンドルすることです。ただし、この方法はカプセル化の原則に少し違反しているように思えます。これを行った 2 つ目の方法は、データを別のクラスに配置し、そのクラスを 2 つのアクティビティ間で共有することです。これはより根本的に健全なようですが、まだ確信が持てません。誰でもこれに光を当てたいですか?
3 に答える
アプリを作成するときに同じ質問があり、最終的に Application クラスを拡張する CustomApplication クラスを作成し、それを AndroidManifest.xml のタグに追加しました。このようにして、適切なゲッターとセッターを使用して、あらゆるタイプのデータを内部に格納できます。(CustomApplication).getApplicationContext() を呼び出すと、アプリ全体で一意の CustomApplication オブジェクトが返され、単一のインスタンス (シングルトン) に存在し、これを使用して必要な値を設定および取得できます。
利点は、アプリの任意の部分 (アクティビティ、サービスなど) が実行されている限り、Application オブジェクトとその中のデータが存在することです。
間でデータを共有するには、さまざまな方法がありますActivities
。
int
データが,double
のような定義済みのデータ型である場合は、string
直接Intent
.データがバイナリ形式またはオブジェクトのような形式の場合は、クラスを
Parcelable
インターフェイスに実装し、送信するために配置Intent
します。データが軽いか小さい場合は、上記の 1、2 のようにします。ただし、パフォーマンスや品質に影響を与えるほど大きい場合は、データ ストアが必要だと思います。ファイル、xml、データベースなどの場所にデータを保存し、そこから読み取り/書き込みを行うようなものです。
任意のクラスをParcelable
インターフェイスに実装してアクティビティ間で配信できますが、この方法ではオブジェクトの新しいコピーが作成され、一貫性が損なわれます。
Android は、Model–View–Controller (MVC) で設計されています。アクティビティはコントローラーであり、データ自体を保持したり、データを直接配信したりすべきではないと思います。アクティビティが次のアクティビティにデータの場所を伝え、次のアクティビティがモデル自体からデータを取得することをお勧めします。
多分あなたは使うことができますProvider
。アクティビティ A はデータの uri をインテントに入れ、インテントを送信してアクティビティ B を開始し、アクティビティ B はインテントからデータの uri を取得し、それを使用してプロバイダーからデータを取得します。