久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > Fragment與activity間的(de)通信

Fragment與activity間的通信(xin) 時(shi)間:2018-09-21 ;   ;  來源:未(wei)知(zhi)

上次介(jie)紹了Fragment的(de)使用,本文主要介(jie)紹Fragment與所(suo)屬Activity之間的(de)通信以及(ji)生命周期

1.3.1 activity向(xiang)Fragment傳遞數據(ju)

Fragment與所屬的activity之間怎么(me)進行數據的傳(chuan)遞呢?

下面我(wo)們我(wo)們在(zai)(zai)主活動(dong)中(zhong)再添加一個EditText和一個Button按鈕,在(zai)(zai)Fragment03中(zhong)添加一個TextView,當我(wo)們在(zai)(zai)點擊這個按鈕后,把EditText中(zhong)的(de)數據顯示到Fragment03中(zhong)的(de)TextView,這就實現了activity向Fragment中(zhong)傳遞數據。代碼如(ru)下:

android :id ="@+id/ et_main "

android : layout_width =" match_parent "

android : layout_height =" wrap_content "/>

android : layout_width =" wrap_content "

android : layout_height =" wrap_content "

android : text傳遞=""

android : onClick =" click4 "/>

這里我們(men)在activity main.xml中添加EditText和Button,并(bing)為Button設置了點擊屬性(xing)

public void click4 ( View v) {

EditText et_main = ( EditText ) findViewById (R.id. et_main );

String text = et_main . getText (). toString ();

fg3. settext ( text );

}

上面我們在(zai)主活動中添加按(an)鈕點(dian)擊方(fang)(fang)法,按(an)鈕點(dian)擊后先獲得EditText中的內容(rong),在(zai)拿到(dao)Fragment03的對象fg3,然后調(diao)用settext的方(fang)(fang)法,這(zhe)(zhe)個(ge)方(fang)(fang)法是(shi)Fragment03類的一個(ge)方(fang)(fang)法,在(zai)這(zhe)(zhe)個(ge)方(fang)(fang)法中設(she)置TextView的內容(rong)。代碼如下:

public class Fragment03 extends Fragment {

private TextView tv;

@Override

public View onCreateView ( LayoutInflater inflater , ViewGroup container ,

Bundle savedInstanceState ) {

// TODO Auto - generated method stub

View v = inflater . inflate (R. layout . fragment03 , null );

tv = ( TextView ) v. findViewById (R.id.tv );

return v;

}

public void settext ( String text ) {

tv. setText ( text );

}

}

我們(men)在EditText中(zhong)輸(shu)入Hello,點(dian)擊傳遞按鈕后,就會在Fragment03中(zhong)顯(xian)示(shi)Hello,如下圖:

 

 

這樣就實現了activity向Fragment傳遞數(shu)據。

1.3.2 Fragment向(xiang)activity傳遞數據(ju)

下面我(wo)們再在Fragment01中(zhong)創(chuang)建一個EditText和Button,當我(wo)們點(dian)擊按鈕后,就(jiu)會把EditText中(zhong)的數據傳遞到活動(dong)中(zhong)EditText中(zhong)并顯示,代碼如下:

android :id ="@+id/ et_frag "

android : layout_width =" wrap_content "

android : layout_height =" wrap_content "/>

android :id ="@+id/bt"

android : layout_width =" wrap_content "

android : layout_height =" wrap_content "

android : text傳遞=""/ >

接著我們(men)要在(zai)主活動(dong)MainActivity中(zhong)定義一(yi)個(ge)方法,用于顯(xian)示主活動(dong)EditText中(zhong)的(de)數據

public void settext ( String text ) {

EditText et_main = ( EditText ) findViewById (R.id. et_main );

et_main . setText ( text );

}

那么我們到底(di)怎么樣(yang)把數據從Fragment01中(zhong)傳入到主(zhu)活(huo)動中(zhong)呢?我們通過調(diao)用getActivity獲(huo)得與這個Fargment相關聯的活(huo)動,然后調(diao)用活(huo)動的settext的方法顯示(shi)數據。代碼如(ru)下:

public View onCreateView ( LayoutInflater inflater , ViewGroup container ,

Bundle savedInstanceState ) {

View v = inflater . inflate (R. layout . fragment01 , null );

Button bt = ( Button ) v. findViewById (R.id.bt );

et_frag = ( EditText ) v. findViewById (R.id. et_frag );

bt. setOnClickListener (new OnClickListener () {

@Override

public void onClick ( View v) {

// TODO Auto - generated method stub

String text = et_frag . getText (). toString ();

(( MainActivity ) getActivity ()). settext ( text );

}

});

return v;

}

如圖,當我們在(zai)Fragment01的EditText中輸入World,點擊傳遞按鈕后,World就會顯示到(dao)主活動(dong)的EditText中

 

 

- 這樣(yang)我(wo)們就實現(xian)Fragment01向Activity傳遞數(shu)據。

1.4 Fragment的生命周期(qi)

和活動一(yi)樣(yang),Fragment也(ye)有自己的生(sheng)命(ming)周(zhou)期,并且它和活動的生(sheng)命(ming)周(zhou)期基(ji)本上一(yi)樣(yang)。

Fragment類提供了(le)一系列的回(hui)(hui)調方(fang)法(fa),其中活動(dong)中有(you)的回(hui)(hui)調方(fang)法(fa),碎片中幾乎都(dou)有(you),不過碎片還提供一些附加的回(hui)(hui)調方(fang)法(fa)

1. onAttach()

當碎片和活動建(jian)立(li)關聯(lian)的(de)時候調(diao)用。

2. onCreateView()

為碎片(pian)創建(jian)視圖(加載布局)時調用。

3. onActivityCreated()

確保與碎片相關聯的活動一定已經創建完畢(bi)的時候調用。

4. onDestroyView()

當與碎片關聯的(de)(de)視圖被移除(chu)的(de)(de)時候調用。

5. onDetach()

當碎片和活動解除關聯的時候調用。

Fragment完(wan)整的生命(ming)周期如下

 

 

下(xia)面我們(men)通過(guo)例子實踐一下(xia),這里我們(men)使用的是前面Fragment簡單使用的案例,代碼(ma)如

下:

public class RightFragment extends Fragment {

public static final String TAG = " RightFragment ";

@Override

public void onAttach ( Activity activity ) {

super . onAttach ( activity );

Log.d(TAG , " onAttach ");

}

@Override

public void onCreate ( Bundle savedInstanceState ) {

super . onCreate ( savedInstanceState );

Log.d(TAG , " onCreate ");

}

@Override

public View onCreateView ( LayoutInflater inflater , ViewGroup container ,

Bundle savedInstanceState ) {

Log.d(TAG , " onCreateView ");

View view = inflater . inflate (R. layout . right_fragment , container , false );

return view ;

}

@Override

public void onActivityCreated ( Bundle savedInstanceState ) {

super . onActivityCreated ( savedInstanceState );

Log.d(TAG , " onActivityCreated ");

}

@Override

public void onStart () {

super . onStart ();

Log.d(TAG , " onStart ");

}

@Override

public void onResume () {

super . onResume ();

Log.d(TAG , " onResume ");

}

@Override

public void onPause () {

super . onPause ();

Log.d(TAG , " onPause ");

}

@Override

public void onStop () {

super . onStop ();

Log.d(TAG , " onStop ");

}

@Override

public void onDestroyView () {

super . onDestroyView ();

Log.d(TAG , " onDestroyView ");

}

@Override

public void onDestroy () {

super . onDestroy ();

Log.d(TAG , " onDestroy ");

}

@Override

public void onDetach () {

-

super . onDetach ();

Log.d(TAG , " onDetach ");

}

}

重新運行程序,打(da)印信息(xi)如下:

 

 

可以看到,當RightFragment第一次被加(jia)載到屏幕上時,會依次執行onAttach()、onCreate()、onCreateView()、onActivityCreated()法。

然后(hou)點擊LeftFragment中的按鈕,此(ci)時打印如下:

 

 

由于(yu)AnotherRightFragment替換了RightFragment,此(ci)時(shi)的(de)RightFragment進入了停止狀態(tai)(tai),因此(ci)onPause()、onStop()和onDestroyView()方法(fa)會得到執行。當然如果在替換的(de)時(shi)候沒有調(diao)用addToBackStack()方法(fa),此(ci)時(shi)的(de)RightFragment就會進入銷毀狀態(tai)(tai),onDestroy()和onDetach()方

法就(jiu)會得(de)到執行(xing)。

接著按下(xia)Back鍵(jian),RightFragment會重(zhong)新回到屏幕,打印信(xin)息如下(xia):

 

 

由于RightFragment重新回

到了運(yun)行(xing)狀態,因此onActivityCreated()、onStart()和(he)onResume()方法會得到執(zhi)行(xing)。注意

此時onCreate()和onCreateView()方(fang)法并不(bu)會執行(xing),因為我(wo)們借(jie)助了addToBackStack()方(fang)法

使(shi)得RightFragment和(he)它的視圖并沒有銷毀。

再次按(an)下Back鍵退出程序,打印(yin)信息如下:

 

 

依(yi)次(ci)會執行onPause()、onStop()、onDestroyView()、onDestroy()和onDetach()方法(fa),終

將活(huo)動和(he)碎片(pian)一起銷毀(hui)。這樣碎片(pian)完整(zheng)的生命周期你也(ye)體(ti)驗了一遍(bian),是(shi)不(bu)是(shi)理解得更加(jia)深刻(ke)了?

上一篇:Altuim designer軟件畫完電路板的后續操

下一篇:SOAP嵌入式linux下的應用(一)

熱點文(wen)章推薦
華清(qing)學員就(jiu)業榜單
高薪學員經驗(yan)分享
熱點新聞(wen)推(tui)薦
前臺專(zhuan)線(xian):010-82525158 企業培(pei)訓洽談專(zhuan)線:010-82525379 院校合(he)作(zuo)洽談(tan)專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部