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

首頁 > 學院 > 開發設計 > 正文

Activity 和 Fragment 之間的數據傳遞

2019-11-09 16:07:46
字體:
來源:轉載
供稿:網友

1.activity傳遞數據給fragment ①使用bundle傳遞數據

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

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

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

fragment調用方法、需要注意的是在設值的時候要進行強轉一下。

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

③使用newInstance傳遞數據

static MyFragment newInstance(String s){ MyFragment myFragment = new MyFragment(); Bundle bundle = new Bundle(); bundle.putString("DATA",s); myFragment.setArguments(bundle); return myFragment; } //同樣,在onCreatView中直接獲取這個值 @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中,創建Fragment

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

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

3.fragment 之間獲取數據 ①通過共同的Activity傳遞

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

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

在另外一個Fragment獲取參數的方式只需要一個語句、key是自己定義的一個標識、參數的形式只要bundle能傳遞都可以實現

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

引用一下Fragment與它的Activity之間進行數據交換的方式。 1.Fragment中通過getActivity()然后進行強制轉化,調用Activity中的公有方法 ((XXXXActivity)getActivity()).fun(); 2.Activity在切換Fragment的時候,通過setArguments向Fragment傳遞參數,Fragment通過getArguments();獲得從activity中傳遞過來的值 3.Activity實現一個接口,Fragment在onAttach方法中,將該Activity轉化為該接口,在需要調用的時候回調。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉田县| 方正县| 柳林县| 东阿县| 苏尼特右旗| 九寨沟县| 尚义县| 仁化县| 克东县| 辽中县| 太保市| 常州市| 修水县| 云阳县| 乐至县| 霍城县| 沂水县| 谷城县| 张家界市| 雅江县| 柳江县| 桐乡市| 霸州市| 垫江县| 庆阳市| 清流县| 昭通市| 霸州市| 克拉玛依市| 高阳县| 政和县| 吉隆县| 博野县| 同仁县| 邢台县| 澄城县| 阳东县| 河北区| 九江市| 和田县| 罗定市|