日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何向前一个Fragment回传信息?

發布時間:2024/4/15 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何向前一个Fragment回传信息? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

我們使用Activity的時候,可以通過startActivityForResult來啟動一個新的Activity,然后在新的Activity中可以用setResult來向前一個Activity回傳一些結果信息,前一個Activity會在onActivityResult中得到這個信息。

那么當我們使用Fragment的形式來作為頁面的時候呢?我們知道可以使用setArguments向后面的Fragment傳遞信息,但是如何回傳結果信息?

setTargetFragment

Android提供了一種方式setTargetFragment

public void setTargetFragment(Fragment fragment, int requestCode)

將前一個Fragment設置給后面的Fragment,然后就可以通過getTargetFragment()和getTargetRequestCode()來獲取對應的Fragment和Code。

當我們需要回傳信息的時候,就可以調用onActivityResult即可,如下:

getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intentData);

這樣前一個Fragment就可以在它的onActivityResult處理這些回傳信息。

上面可以發現其實就是將前一個Fragment對象交給后面的Fragment持有而已,我們自己創建一個set函數其實也可以實現,但是還是推薦使用Android提供的setTargetFragment,來看看它的源碼:

/*** Optional target for this fragment. This may be used, for example,* if this fragment is being started by another, and when done wants to* give a result back to the first. The target set here is retained* across instances via {@link FragmentManager#putFragment* FragmentManager.putFragment()}.** @param fragment The fragment that is the target of this one.* @param requestCode Optional request code, for convenience if you* are going to call back with {@link #onActivityResult(int, int, Intent)}.*/ public void setTargetFragment(Fragment fragment, int requestCode) {// Don't allow a caller to set a target fragment in another FragmentManager,// but there's a snag: people do set target fragments before fragments get added.// We'll have the FragmentManager check that for validity when we move// the fragments to a valid state.final FragmentManager mine = getFragmentManager();final FragmentManager theirs = fragment != null ? fragment.getFragmentManager() : null;if (mine != null && theirs != null && mine != theirs) {throw new IllegalArgumentException("Fragment " + fragment+ " must share the same FragmentManager to be set as a target fragment");}// Don't let someone create a cycle.for (Fragment check = fragment; check != null; check = check.getTargetFragment()) {if (check == this) {throw new IllegalArgumentException("Setting " + fragment + " as the target of "+ this + " would create a target cycle");}}mTarget = fragment;mTargetRequestCode = requestCode; }/*** Return the target fragment set by {@link #setTargetFragment}.*/ final public Fragment getTargetFragment() {return mTarget; }/*** Return the target request code set by {@link #setTargetFragment}.*/ final public int getTargetRequestCode() {return mTargetRequestCode; }

可以看到setTargetFragment會先進行兩輪校驗,首先保證前后兩個Fragment是同樣的FragmentManager,然后保證TargetFragment和當前Fragment不是同一個,所以setTargetFragment會更安全,而且Android已經提供了這套方式,我們就沒必要自己再實現了。

總結

以上是生活随笔為你收集整理的如何向前一个Fragment回传信息?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。