Reputation: 1345
I have a fragment that I call like so from my activities onCreate
android.app.FragmentManager fragmentManager = getFragmentManager();
DeviceControlFragment newFragment = new DeviceControlFragment();
newFragment.device = device;
fragmentManager.beginTransaction()
.replace(R.id.content_frame, newFragment)
.commit();
In the fragment I can either pop the back stack or hit back like so:
getFragmentManager().popBackStack();
OR
getActivity().onBackPressed();
But I need something in the activity so that I know we have returned there, is there something similar to onActivityResult
that I can override in the activity to know when the fragment has been 'finished'
Upvotes: 2
Views: 1198
Reputation: 1119
You should probably set a onBackStackChanged() listener on your fragment manager.
Example:
getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
//here you can check stuff. like:
final Fragment mCurrentFragment = getFragmentManager().findFragmentById(R.id.container);
//or get the number of fragments currently on your stack:
getFragmentManager().getBackStackEntryCount()
}
});
Upvotes: 3
Reputation: 3709
Declare a interface inside fragment and implement it in your activity and send response to activity inside onDetach()
,onDestroy
or onPaused
method of fragment, any of them which suits you. I will prefer onDetach
or onDestroy
Here is sample for that:
public class MyFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
}
private Test mListener;
public interface Test{
void imLeavingYou();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
mListener = (Test) context;
}
@Override
public void onDetach() {
super.onDetach();
if(mListener != null){
mListener.imLeavingYou();
}
}
}
And in your Activity
do this:
public class MyActivity extends AppCompatActivity implements MyFragment.Test {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
@Override
public void imLeavingYou() {
// Okay thanks for informing
}
}
Upvotes: 4