天天看點

兩個activity或者activity和fragment傳值

使用fragment的時候可能需要在兩個fragment之間進行參數的傳遞,開始想着可以使用sharedpreferences進行處理,想想這些簡單的參數沒有必要使用這麼麻煩的方式去實作,翻了一下fragment的api,找到一個方法就能實作像activity一樣便捷的實作參數傳遞 程式中的一段代碼

ft.hide(getactivity().getsupportfragmentmanager().findfragmentbytag(“”));  

                searchprojectfragment sf = new searchprojectfragment();  

                bundle bundle = new bundle();  

                bundle.putstring("key", projsid);  

                sf.setarguments(bundle);  

                ft.add(r.id.fragmentroot, sf, searchproject);  

                ft.addtobackstack(searchproject);  

                ft.commit();  

   可以使用bundle進行參數傳遞,這樣在兩個fragment跳轉的時候就可以帶上參數了,在另外一個fragment擷取參數的方式隻需要一個語句string string = getarguments().getstring("key");  key是自己定義的一個辨別,參數的形式隻要bundle能傳遞都可以實作

     這個原理好像是和activity是一樣的。我這裡傳遞的是一個關鍵字,從一個搜尋fragment頁面跳轉到兩外一個結果查詢的fragment頁面,在跳轉的時候也可以加上一些動畫的跳轉效果

ft.setcustomanimations(r.anim.slide_in_right, r.anim.slide_out_left, r.anim.slide_in_left, r.anim.slide_out_right); 

下面是我在項目中例子,fragment通過itent将值傳遞到activty,然後通過下面的代碼

 shipproductid=getintent().getstringextra("shipproductid");

        shipcompanyfragment=new shipcompanyfragment();

        bundle bundle=new bundle();

        bundle.putstring("productid", shipproductid);

        shipcompanyfragment.setarguments(bundle);

        fragmenttransaction ft = getsupportfragmentmanager().begintransaction();

        ft.add(r.id.ship_container, shipcompanyfragment);

        ft.commit();

傳遞到fragment,

最後再fragment中

shipproductid=getarguments().getstring("productid");

即可得到