簡體   English   中英

從片段返回活動時調用函數

[英]Calling a function when an activity is returned to from fragment

我有一個片段,我在onCreate活動中這樣稱呼它

android.app.FragmentManager fragmentManager = getFragmentManager();

DeviceControlFragment newFragment = new DeviceControlFragment();

newFragment.device = device;
fragmentManager.beginTransaction()
        .replace(R.id.content_frame, newFragment)
        .commit();

在片段中,我可以彈出堆棧或像這樣回擊:

getFragmentManager().popBackStack();

要么

getActivity().onBackPressed();

但是我在活動中需要一些東西,以便我知道我們已經返回那里,是否存在類似於onActivityResult東西,我可以在活動中覆蓋它,以了解片段何時“完成”

在片段內部聲明一個接口,並在您的活動中實現該接口,並在片段的onDetach()onDestroyonPaused方法中發送對活動的響應,其中任何一種都適合您。 我更喜歡onDetachonDestroy

這是該示例:

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();
        }
    }
}

然后在您的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
    }
}

您可能應該在片段管理器上設置onBackStackChanged()偵聽器。

例:

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