2017-12-15 8 views
0

現在、私は私のプロジェクトでフラグメントを使用しています。しかし、検索画面だけでは、別のアクティビティを使用しています。私はその活動を断片に変換しようとしています。私の問題は現在私は断片的な検索活動と呼んでいますどのように断片ためStartActivityForResultを使用するには?

private void callLocationSearch() { 
     Intent intent = new Intent(activity, SearchDataFilterActivity.class); 
     intent.putExtra(Constants.RECEIVE_INTENT_DATA, activity.getResources().getString(R.string.location)); 
     startActivityForResult(intent, FOR_SEARCH_LOCATION); 
    } 

検索画面から結果を設定して前の画面に送信します。

setResult(Activity.RESULT_OK, returnIntent); 
finish(); 

onActivityResultに私は結果を取得し、検索フィールドに設定されているので。この画面には複数のフィールドがあります。そこで、私は検索アクティビティから検索し、この断片を設定します。今度は、検索アクティビティをFragmentに変更しました。問題は、setResultを実行してフラグメントに返すことができないことです。私は別のフラグメントを作成して値を渡すことしかできません。以前の値が失われるように。私の問題を解決するために何か考えてください。

これにより、私は、スクリーンショットを添付:

まず一つは Fragment Image

2つ目は、検索アクティビティである断片です。より明確にするため Activity

私は1枚の以上の画像を添付。フラグメントで enter image description here

+0

あなたは画面を投稿できますか?私はまだそれが –

+1

追加のスクリーンショットを見てどのように想像することはできません。レビューしてください。 –

答えて

0

お持ちの使用「getActivity()」

getActivity().setResult(Activity.RESULT_OK, returnIntent); 
+0

これは意図のためです。しかし、断片化することを求めています。 –

0

2つの方法が私の心にポップアップがあります:
を断片化し、フラグメントBから値を送信するために 1.使用localbroadcast 2.検索が行われた後、SharedPreferencesに値を格納し、onResumeでフラグメントにそれを得ます。

あなたの方法を選択してください:)

1

あなたはあなたが

private OnSomethingSelectedListener mListener; 

// Container Activity must implement this interface 
public interface OnSomethingSelectedListener { 
    public void onSearchComplete(Result object or more params); 
} 

フラグメントA(または情報を受け取るべきクラス)FragmentB.OnSomethingSelectedListenerとonSearchCompleteを実装する必要がありフラグメントBで、リスナーを使用する必要があります方法。フラグメントAではまたは活性の (あなたが断片Bを作成する)あなたのようなフラグメントBのコンストラクタに(断片Aまたはアクティビティ)

FragmentB b = new FragmentB(this); 

public FragmentB(OnSomethingSelectedListener listener) { 
    mListener = listener; 
} 

今...断片Bで代わりのsetResultあなたを使用してインスタンスを渡すことができますこれは、断片通信のために移動するための方法であるシンプルなリスナー、ある

mListener.onSearchComplete(result); 

を使用しますが、あなたはここで、これについての詳細を読むことができる

Communicating with Other Fragments

+1

これはベストプラクティスですが、欠落しています。フラグメントがフラグメントマネージャーによって追加または置換されているので、新しいフラグメントを構築するのではなく、タグでフラグメントBを見つける方が良いと思います。 Cmiiw –

関連する問題