国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Activity 和 Fragment 之間的數(shù)據(jù)傳遞

2019-11-09 17:16:39
字體:
供稿:網(wǎng)友

1.activity傳遞數(shù)據(jù)給fragment ①使用bundle傳遞數(shù)據(jù)

> MyFragment fragment = new MyFragment(); >Bundle bundle = new Bundle(); >bundle.putString("data", "Activity發(fā)送給MyFragment的數(shù)據(jù)"); >fragment.setArguments(bundle);

然后在Fragment中的onCreatView方法中,通過getArgments()方法,獲取到bundle對(duì)象,然后通過getString的key值拿到我們傳遞過來的值。 ②在Activity中定義一個(gè)字段、然后添加set和get方法, 代碼如下、mTitle就是要傳遞的參數(shù)、如果是傳遞對(duì)象、可以把mTitle換成一個(gè)對(duì)象。

public class MyActivity{ PRivate String mTitle; public void setmTitle(string str){ this.mtitle =str; public String getmTitle(){ return mTitle; } }

fragment調(diào)用方法、需要注意的是在設(shè)值的時(shí)候要進(jìn)行強(qiáng)轉(zhuǎn)一下。

((MyActivity)getActivity()).getmTitle();

③使用newInstance傳遞數(shù)據(jù)

static MyFragment newInstance(String s){ MyFragment myFragment = new MyFragment(); Bundle bundle = new Bundle(); bundle.putString("DATA",s); myFragment.setArguments(bundle); return myFragment; } //同樣,在onCreatView中直接獲取這個(gè)值 @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.layout_fragment,container,false); Bundle bundle = getArguments(); String data = bundle.getString("DATA"); tv = (TextView) view.findViewById(R.id.id_fm_tv); if(data != null){ tv.setText(data); } return view; }

在宿主activity中,創(chuàng)建Fragment

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.setCustomAnimations(android.R.anim.fade_in,android.R.anim.fade_out); fragment1 = MyFragment.newInstance("這是第一個(gè)fragment");//這里只需要直接調(diào)用這個(gè)方法,就創(chuàng)建了一個(gè)fragment fragment2 = MyFragment.newInstance("這是第二個(gè)fragment"); fragment3 = MyFragment.newInstance("這是第三個(gè)fragment");

2.fragment 傳遞數(shù)據(jù)給activity 兩個(gè)類之間傳值可以用get()/set()的方式。但是這樣不靈活。最好的辦法是用回調(diào),或者觀察者模式來實(shí)現(xiàn)。 Fragment和Activity是兩個(gè)組件類,不能直接new來獲取對(duì)象。所以用觀察者模式比較合理。android系統(tǒng)里也大量使用這種方式來傳值。 ①回調(diào) 在fragment中定義一個(gè)內(nèi)部回調(diào)接口,再讓包含該fragment的activity實(shí)現(xiàn)該回調(diào)接口,這樣fragment即可調(diào)用該回調(diào)方法將數(shù)據(jù)傳給activity。 MyActivity extends 回調(diào)類,傳遞給fragment,fragment調(diào)用回調(diào)類方法,再由activity去實(shí)現(xiàn)回調(diào)類方法。 ②觀察者模式 見下節(jié)

3.fragment 之間獲取數(shù)據(jù) ①通過共同的Activity傳遞

??這種方法是在Activity里面添加一個(gè)字段、來臨時(shí)保存要一些值。在Activity中定義一個(gè)字段、然后添加set和get方法、代碼如下、mTitle就是要傳遞的參數(shù)、如果是傳遞對(duì)象、可以把mTitle換成一個(gè)對(duì)象即可. 代碼同1.2 ② 通過bundle傳遞 可以使用bundle進(jìn)行參數(shù)傳遞、這樣在兩個(gè)Fragment跳轉(zhuǎn)的時(shí)候就可以帶上參數(shù)了、同樣也可以傳遞一個(gè)復(fù)雜的對(duì)象。

ft.hide(getActivity().getSupportFragmentManager().findFragmentByTag("")); DemoFragment demoFragment = new DemoFragment(); Bundle bundle = new Bundle(); bundle.putString("key", "這是方法二"); demoFragment.setArguments(bundle); ft.add(R.id.fragmentRoot, demoFragment, SEARCHPROJECT); ft.commit();

在另外一個(gè)Fragment獲取參數(shù)的方式只需要一個(gè)語句、key是自己定義的一個(gè)標(biāo)識(shí)、參數(shù)的形式只要bundle能傳遞都可以實(shí)現(xiàn)

String string = getArguments().getString("key");

引用一下Fragment與它的Activity之間進(jìn)行數(shù)據(jù)交換的方式。 1.Fragment中通過getActivity()然后進(jìn)行強(qiáng)制轉(zhuǎn)化,調(diào)用Activity中的公有方法 ((XXXXActivity)getActivity()).fun(); 2.Activity在切換Fragment的時(shí)候,通過setArguments向Fragment傳遞參數(shù),F(xiàn)ragment通過getArguments();獲得從activity中傳遞過來的值 3.Activity實(shí)現(xiàn)一個(gè)接口,F(xiàn)ragment在onAttach方法中,將該Activity轉(zhuǎn)化為該接口,在需要調(diào)用的時(shí)候回調(diào)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 凤台县| 岚皋县| 沁水县| 涞源县| 阿拉善右旗| 嘉义县| 平罗县| 彝良县| 天峨县| 盐池县| 虹口区| 横山县| 郓城县| 威宁| 怀化市| 昂仁县| 西乌珠穆沁旗| 桃江县| 临潭县| 宜州市| 固始县| 云浮市| 阳江市| 金平| 炉霍县| 马尔康县| 道真| 阳谷县| 敦化市| 集安市| 遂昌县| 平凉市| 庆云县| 西畴县| 平度市| 体育| 凯里市| 白朗县| 西峡县| 光泽县| 上虞市|