編輯:關於Android編程
Fragment 與 Activity之間傳遞數據有兩種方法,一種是使用setArgument,一種是使用接口回調。下面先學習第一種方法。
(1)使用setArgument方法:
為了便於理解,我在這裡打個比喻:假如Activity是皇帝,它設立了三個部門(如三省六部),分別是Fragment1,Fragment2和Fragemnt3;
現在他現在要吩咐部門Fragment1去做一些事情,比如說:領兵攻打島國!!好,它肯定不自己跑去告訴該部門的。
一般來說,會有個宰相或者太監總管來負責皇帝口谕是吧;這個太監總管就是FragmentManager。然後,當然,
太監總管也是不會親自跑過去的,這時候有個名叫FragmentTransaction 的事務太監,總的來說,
它就負責三件事情:add(), remove(), replace(),按照皇帝的意思去增加一個部門,撤銷一個部門,和替換掉一個部門。
現在這個事務太監有新任務了,就是增加一個部門,然後告訴它去攻打島國。好。把內容“帶兵攻打島國”裝到信封裡
(信封就是Bundle)。注意到,這是密令,當然要做個記號什麼的來標記一下,就是加上Tag,這裡我們指定是“179521”。
最後綁在白鴿上發送出去(commit())。
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHByZSBjbGFzcz0="brush:java;">
@Override public void onClick(View arg0) { if (arg0.getId()==R.id.send_data_btn) { LeftFragment fragment = new LeftFragment(); Bundle bundle = new Bundle(); bundle.putString("order", "帶兵攻打島國"); fragment.setArguments(bundle); FragmentManager fragmentManager = getFragmentManager(); //開始Fragment事務 FragmentTransaction fTransaction = fragmentManager.beginTransaction(); //將Fragment添加到事務中,並指定一個TAG fTransaction.add(fragment, "179521"); //提交Fragment事務 fTransaction.commit(); } }
上面那個比喻不是十分恰當,現在用正式的語言來說明下哈:
要是你熟悉Activity的生命周期,應該知道每一個應用都有一個獨一無二的Task,Task裡有個回退棧backstack,存儲Activity的窗口實例對象;
由於Fragment也是有窗口實例對象的,因此它出現時也是要進入到回退棧的。
使用Fragment,Android為了讓用戶或者開發者來執行對Fragment的管理,比如說增加,移除和替換等。從Android3.0後有一個類,
FragmentManager專門用來管理Fragment,但是它不親自執行具體動作,而是使用一個對象,片段事務,FragmentTransaction,
應該認識到的是 每個FragmentTransaction是一組同時執行的變化的集合。比如說同時添加2個Fragment,然後刪除其中一個。
這都是同時執行的。用add(),remove(), replace()方法,把所有需要的變化加進去,然後調用commit()方法,將這些變化應用。
在commit()方法之前,你可以調用addToBackStack(),把這個transaction加入backstack中去,這個back stack是由activity
管理的,當用戶按返回鍵時,就會回到上一個fragment的狀態。
在Fragment接收數據:
得到FragmentManager,然後根據標簽Tag和key取出對應的內容。
@Override public void onClick(View arg0) { if (arg0.getId()==R.id.get_data_btn) { String name = getFragmentManager().findFragmentByTag("179521").getArguments().getString("order"); Toast.makeText(getActivity(), "命令是"+name, Toast.LENGTH_SHORT).show(); } }
結果如下:
明天再把回調的方法寫上。
先上傳第一個方法的DEMO例子。
例程下載
在Android應用開發中會經常碰到一個叫divider的東西,就是兩個View之間的分割線。最近工作中注意到這個divider並分析了一下,竟然發現內有乾坤,驚為天人…
我在上一篇文章中Android 帶你從源碼的角度解析Scroller的滾動實現原理從源碼的角度介紹了Scroller的滾動實現原理,相信大家對Scrolle
Android中判斷當前網絡是否可用 應用場景:實現判斷當前網絡是否可用當前有可用網絡,如下圖:當前沒有可用網絡,如下圖:實現步驟:1、獲取ConnectivityMan
先來看看網易新聞客戶端以及自己實現的效果圖,效果當然還是網易的好gridviewsort.gif如何實現拖拽一個Item用WindowManager添加一個ImageVi