web-dev-qa-db-ja.com

Android:putExtraを使用してフラグメントからコンテナアクティビティオブジェクトにアクセスしますか?

アクションバーとフラグメントを使用してタブインターフェイスを構築しています。コンテナアクティビティからフラグメントにデータを送信する際に支援が必要です。

詳述すると、コンテナアクティビティにジョブオブジェクトがあります。また、ジョブオブジェクトの情報(会社の詳細、経験の詳細など)に基づいて、いくつかのタブを作成しました。それぞれの情報を表示できるように、これらのフラグメントにジョブオブジェクトを渡す必要があります。

コンテナアクティビティとタブフラグメントを作成しました。オブジェクトをそれらに渡す方法の例が必要になります。 intent.putExtraを使用できません。フラグメントから親コンテナのオブジェクトにアクセスできますか?

どんな助けでもありがたいです。

ありがとう。

14
user1829067

アクティビティでメソッドを作成します。たとえば、getJobオブジェクトとその情報を返すJob

_MyActivity extends Activity{
Job mJob;

public Job getJob(){
   return this.mJob;
 }
}
_

次に、フラグメントでこれを行います。

_MyFragment extends Fragment{

@Override
public void onActivityCreated(){
  super.onActivityCreated();
  ((MyActivity)this.getActivity()).getJob();
 }
}
_

getActivityとメソッドgetJob();を使用してオブジェクトを取得します

49
Greensy

これを達成する方法は複数あります。

  1. static変数を作成してデータを保持し、フラグメント内からそのデータにアクセスします。これは最も高速ですが、不適切に使用するとデザインパターンが悪くなります。
  2. Fragment-to-Fragment communication possible through the parent Activityの方法はここに掲載されています: http://developer.Android.com/training/basics/fragments/communicating.html サンプルコードを使用してActivity - Fragment data send
  3. ここで最も投票された回答: 親アクティビティのインスタンスにアクセスしますか?a way to avoid using static data(1。)に言及し、ActivityGroupを使用したソースコードの例が含まれています

「最初のアクティビティを静的に参照せずに、その値にアクセスする必要がある場合は、アクティビティをActivityGroupに入れることを検討できます。」

あなたが選ぶのはあなたの好みです、これらはほんのいくつかのオプションです!


2
LonWolf