2016-06-29 10 views
0

私はアクティビティを持っています。Aがロードされると、Aのボタンをクリックすると、AのホームレイアウトにフラグメントFが追加されます。いったんFの中にいれば、getActivity().getSupportFragmentManager().popBackStack();と呼んでいれば、アクティビティAに再びナビゲートします。実際にフラグメントがpopbackstackedされたら、アクティビティAでいくつかの変更を加えることができますか?フラグメントがpopbackstackedされ、あなたの活動があると、どのメソッドがアクティビティで呼び出されているのかわかりません。助けてください。閉鎖時の更新アクティビティ

答えて

1

OnBackStackChangedListener()を追加できます。

getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener() 
{ 
    public void onBackStackChanged() 
    {     

    } 
}); 

このコールバックは、バックスタックの変更ごとに呼び出されます。

+0

呼び出すためにこのメソッドをインターフェイスを実装しますか? @R。 Adasiewicz –

+0

私はそれを追加中にバックスタックにフラグメントを追加していません。私はfragmentTransaction.addToBackStack(null)を書きました。 –

+0

アクティビティ –

1

作成し、あなたの活動にあなたの活動で

public class MyFragment extends Fragment { 
OnFragmentCloseListener mCallback; 

// Container Activity must implement this interface 
public interface OnFragmentCloseListener { 
    public void onClosed(Bundle data); 
} 

//call this while closing the fragment 
Bundle data = new Bundle(); 
data.putExtra("key"," value"); 
mCallback.onClosed(data); 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    // This makes sure that the container activity has implemented 
    // the callback interface. If not, it throws an exception 
    try { 
     mCallback = (OnFragmentCloseListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement OnFragmentCloseListener "); 
    } 
} 

} 

public static class MainActivity extends Activity 
    implements MyFragment.OnFragmentCloseListener { 

    public void onClosed(Bundle data) { 
    //get the budle data here 
    } 
} 
+0

@ SaravInfern-複数のフラグメントがある場合や、それらのすべてがアクティビティといくつかのデータを共有しようとしている場合はどうすればよいですか? –

+0

共通のインターフェースを持っていて、バンドルの中に 'Bundle data = new Bundle();からのフラグメントを示すキーを入れます。data.putExtra( "from"、 "fragment1"); mCallback.onClosed(data); 'アクティビティで、どちらが閉じられているかを知るためのキーをチェックします – SaravInfern