简体   繁体   English

从片段返回活动时调用函数

[英]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()onDestroyonPaused方法中发送对活动的响应,其中任何一种都适合您。 I will prefer onDetach or onDestroy 我更喜欢onDetachonDestroy

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM