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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fragment.setArguments()

發(fā)布時間:2025/6/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fragment.setArguments() 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在我們平常開發(fā)的時候Fragment是經(jīng)常使用的,而我們創(chuàng)建一個Fragment對象的時候一般都會 通過 new Fragment()構(gòu)造方法來實現(xiàn),如果要傳遞參數(shù)我們一般會重載構(gòu)造方法,例如 new Fragment(Parameter p)。

但是這樣的做法是不被提倡的,如果你重載構(gòu)造函數(shù)之后,系統(tǒng)會有一個warning,如下:

Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead
  • 1

這個警告的意思就是,盡量避免使用 不是默認(rèn)的構(gòu)造函數(shù)(也就是我們重載的構(gòu)造函數(shù)):通過 使用默認(rèn)的構(gòu)造函數(shù) 加上 Fragment.setArguments(Bundle)來取代。

接下來我們來看一下這兩種方式:

重載的構(gòu)造函數(shù):

public class MyFragment extends Fragment { public MyFragment(MyParameter p){ //將參數(shù)保存起來 } }

如果在創(chuàng)建Fragment的時候,使用?MyFragment mf = new MyFragment(parameter)?
來傳遞參數(shù)。

通過Fragment.setArguments(Bundle)

public class MyFragment extends Fragment { public static MyFragment newInstance(int someInt) { MyFragment myFragment = new MyFragment(); Bundle args = new Bundle(); args.putInt("someInt", someInt); myFragment.setArguments(args); return myFragment; } }

?

這種方式在創(chuàng)建Fragment的時候,使用MyFragment mf = MyFragment.newInstance(paramter)?來傳遞參數(shù)。

分析

乍一看這兩種方法似乎沒有什么本質(zhì)區(qū)別,但是實際上 方法一(重載構(gòu)造函數(shù))是有一個隱患的。

根據(jù)Android文檔說明,當(dāng)一個fragment重新創(chuàng)建的時候,系統(tǒng)會再次調(diào)用 Fragment中的默認(rèn)構(gòu)造函數(shù)。?注意這里:是?默認(rèn)構(gòu)造函數(shù)。

這句話更直白的意思就是:當(dāng)你小心翼翼的創(chuàng)建了一個帶有重要參數(shù)的Fragment的之后,一旦由于什么原因(橫豎屏切換)導(dǎo)致你的Fragment重新創(chuàng)建?!?很遺憾的告訴你,你之前傳遞的參數(shù)都不見了,因為recreate你的Fragment的時候,調(diào)用的是默認(rèn)構(gòu)造函數(shù)

對比

而使用系統(tǒng)推薦的 Fragment.setArguments(Bundle)來傳遞參數(shù)。就可以有效的避免這一個問題,當(dāng)你的Fragment銷毀的時候,其中的Bundle會保存下來,當(dāng)要重新創(chuàng)建的時候會檢查Bundle是否為null,如果不為null,就會使用bundle作為參數(shù)來重新創(chuàng)建fragment.

疑問:

當(dāng)fragment重建的時候,怎么獲取之前的參數(shù)呢??
以上面的代碼為例:我們可以重寫 fragment的onCreate()方法。

getArguments().getInt("someInt", 0);

?

當(dāng)fragment重現(xiàn)創(chuàng)建,調(diào)用onCreate方法,然后就可以取得之前的參數(shù)了,然后就可以盡情使用了。

bundle是如何將參數(shù)保存下來,然后重建的時候再利用呢?

這個問題可以移步這篇博客。

注意:

setArguments can only be called before the Fragment is attached to the Activity.

setArguments方法的調(diào)用必須要在Fragment與Activity關(guān)聯(lián)之前。

這句話可以這樣理解,setArgument方法的使用必須要在FragmentTransaction 的commit之前使用。?
詳見:連接。

參考資料1:

參考資料2

參考資料3

轉(zhuǎn)載于:https://www.cnblogs.com/holyday/p/7505559.html

總結(jié)

以上是生活随笔為你收集整理的Fragment.setArguments()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99热这里只有精品18 | 中文字幕在线免费 | 97操操| 手机在线免费看av | 无人码人妻一区二区三区免费 | 国产精品高潮呻吟视频 | 在线免费黄色片 | 大地资源二中文在线影视观看 | 同性色老头性xxxx老头 | 可以免费观看av的网站 | 精品国产一区二区三区性色av | 国产精品久久久久久久9999 | 亚洲激情自拍 | 91久久精品无码一区二区 | 久久精品视频在线播放 | 欧美啪视频 | 天堂中文在线观看 | 桃色91 | 国产精品久久亚洲7777 | 亚洲精品888| 香蕉一区二区三区四区 | 99精品在线 | 先锋av在线资源 | 在线视频欧美亚洲 | 91新网站 | 中国 免费 av | 国产精品视频a | 国产精品啪 | 制服丝袜成人动漫 | 色呦呦在线免费观看 | 中文字幕理论片 | 鲁丝片一区二区三区 | 影音先锋亚洲成aⅴ人在 | 亚洲视频一| 欧美69av | 国产av天堂无码一区二区三区 | av午夜天堂| 一级黄色片免费看 | 在线麻豆av | 国产精品第56页 | www.亚洲欧美 | 日本一级黄色录像 | 日本免费一二区 | 先锋影音亚洲 | 欧美看片| 国产一级二级毛片 | 麻豆91茄子在线观看 | 亚洲成人自拍 | 精国产人伦一区二区三区 | 8x8ⅹ成人永久免费视频 | 亚洲精品国产手机 | 国产乱女淫av麻豆国产 | xxx久久久 | 四虎成人永久免费视频 | 精品国产视频一区二区 | 尤果网福利视频在线观看 | 91精品久久久久久粉嫩 | 国产在线视频91 | 亚洲精华液一区二区 | 成人毛片在线精品国产 | 在线观看一级片 | 日本久久久久久久久久久 | 亚洲av永久无码国产精品久久 | 免费在线成人 | 97超在线 | 97视频入口| 一区二区在线观看视频 | aa视频免费观看 | 亚洲中字在线 | 中文字幕免费观看视频 | 日日操夜夜爽 | 未满十八18禁止免费无码网站 | 成年人午夜视频 | 宇都宫紫苑在线播放 | 国产婷婷综合 | 依依成人在线 | 日批在线视频 | 91精品黄色| 91免费国产视频 | 冲田杏梨 在线 | 久久少妇网 | 黄色成人在线观看 | 亚洲国产精品成人综合 | 欧美色图五月天 | 国产激情无套内精对白视频 | 91久| 玖玖色在线 | 国产av电影一区二区 | 亚洲丝袜在线观看 | 性囗交免费视频观看 | 精品播放| 一区二区精 | 中文字幕人成人乱码亚洲电影 | 欧美 日韩 国产 成人 在线观看 | 97超碰精品 | 草草网址 | 久久在线播放 | 日韩精品黄 | 曰本黄色片|