[英]Calling a function when an activity is returned to from fragment
I have a fragment that I call like so from my activities onCreate
我有一个片段,我在
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' 但是我在活动中需要一些东西,以便我知道我们已经返回那里,是否存在类似于
onActivityResult
东西,我可以在活动中覆盖它,以了解片段何时“完成”
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. 在片段内部声明一个接口,并在您的活动中实现该接口,并在片段的
onDetach()
, onDestroy
或onPaused
方法中发送对活动的响应,其中任何一种都适合您。 I will prefer onDetach
or onDestroy
我更喜欢
onDetach
或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: 然后在您的
Activity
执行以下操作:
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
}
}
You should probably set a onBackStackChanged() listener on your fragment manager. 您可能应该在片段管理器上设置onBackStackChanged()侦听器。
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()
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.