版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
主講教師:日期:第7章深入理解Activity與FragmentAndroid程序設(shè)計目錄/CONTENTS7.1建立、配置和使用Activity7.2Activity的生命周期和啟動模式7.3Fragment詳解1.掌握Activity的配置和使用。2.了解Activity的生命周期。3.了解Fragment原理。學(xué)習(xí)目標(biāo)4.掌握Fragment的應(yīng)用。7.1建立、配置和使用Activity7.1.1?Activity介紹一個Activity是一個應(yīng)用程序組件,它會提供一個屏幕,用戶可通過與屏幕交互完成某項任務(wù),例如撥號、拍照、發(fā)送email、看地圖。每一個Activity被給予一個窗口,在上面可以繪制用戶接口。窗口通常充滿屏幕,但也可以小于屏幕而浮于其他窗口之上。一個應(yīng)用程序通常由多個Activity組成。通常,每個應(yīng)用程序中都有一個MainActivity,相當(dāng)于程序的入口。其他Activity從這個Activity啟動。每一次一個Activity啟動,前一個Activity就停止了,但是系統(tǒng)會將Activity保留在一個棧上(backstack)。當(dāng)一個新Activity啟動,它被推送到棧頂,取得用戶焦點。BackStack符合“后進(jìn)先出”原則,所以,當(dāng)用戶完成當(dāng)前Activity然后單擊back按鈕后,它會被彈出棧(并且被摧毀),然后之前的Activity恢復(fù)。7.1建立、配置和使用Activity7.1.2?Activity配置配置Activity時通常指定如下幾個屬性。(1)name:指定該Activity的實現(xiàn)類的類名。(2)icon:指定該Activity對應(yīng)的圖標(biāo)。(3)label:指定該Activity的標(biāo)簽。(4)exported:指定該Activity是否允許被其他應(yīng)用調(diào)用。如果將該屬性設(shè)為true,那么該Activity將可以被其他應(yīng)用調(diào)用。(5)launchMode:指定該Activity的加載模式,該屬性支持standard、singleTop、singleTask和singleInstance這4種加載模式。除此之外,配置Activity時通常還需要指定一個或多個<intent-filter.../>元素,該元素用于指定該Activity可響應(yīng)的Intent。7.1建立、配置和使用Activity7.1.3?Activity的啟動與關(guān)閉Activity啟動其他Activity有如下兩個方法。(1)startActivity(Intentintent):啟動其他Activity。(2)startActivityForResult(Intentintent,intrequestCode):以指定的請求碼(requestCode)啟動Activity,而且程序?qū)@取新啟動的Activity返回的結(jié)果(通過重寫onActivityResult(..)方法來獲?。?。其中requestCode參數(shù)代表了啟動Activity的請求碼,該請求碼的值由開發(fā)者根據(jù)業(yè)務(wù)自行設(shè)置,用于標(biāo)識請求來源。方式一://創(chuàng)建Intent對象Intentintent1=newIntent();//設(shè)置需要啟動的Activity,以及要啟動Activity的上下文環(huán)境intent1.setClass(this,MyActivity.class);方式二://直接創(chuàng)建Intent對象,包含要啟動的Activity信息Intentintent2=newIntent(this,MyActivity.class);7.1建立、配置和使用ActivityAndroid為關(guān)閉Activity準(zhǔn)備了如下兩個方法:(1)finish():結(jié)束當(dāng)前Activity。(2)finishActivity(intrequestCode):結(jié)束以startActivityForResult(Intentintent,intrequestCode)方法啟動的Activity。7.1建立、配置和使用Activity【例7-1】Activity的啟動和關(guān)閉實現(xiàn)的過程如下。新建一個activitystartupshutdown的Module,該Module一共包含了兩個Activity,并在AndroidManifest清單文件中配置兩個Activity。第一個Activity的界面布局非常簡單,只包含一個按鈕和文本提示,其中按鈕的作用主要是啟動第二個Activity。第一個Activity對應(yīng)的布局代碼activity_main.xml的代碼如下:<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/start_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="啟動第一個Activity"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:text="我是MainActivity"/></RelativeLayout>7.1建立、配置和使用Activity第二個Activity對應(yīng)的布局也比較簡單,包含3個按鈕和一個文本提示,其中一個按鈕用于簡單的返回上一個Activity,第二個按鈕用于結(jié)束自己并返回上一個Activity,第三個按鈕直接結(jié)束自己。第二個Activity對應(yīng)的布局代碼activity_second.xml的代碼如下:<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/back_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="返回"/><Buttonandroid:id="@+id/back_close_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/back_btn"android:text="返回并關(guān)閉自已"/><Buttonandroid:id="@+id/close_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/back_close_btn"android:text="關(guān)閉自已"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:text="我是SecondActivity"/></RelativeLayout>7.1建立、配置和使用ActivityAndroidManifest清單文件的Activity配置如下:<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"package="com.example.a713"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activityandroid:name=".activity_second"></activity><activityandroid:name=".MainActivity"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity></application></manifest>7.1建立、配置和使用Activity編輯第一個Activity,MainActivity的代碼如下:publicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButtonstartBtn=(Button)findViewById(R.id.start_btn);startBtn.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewsource){Intentintent=newIntent(MainActivity.this,activity_second.class);startActivity(intent);}});}}7.1建立、配置和使用Activity編輯第二個Activity,SecondActivity的代碼如下:publicclassactivity_secondextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);ButtonbackBtn=(Button)findViewById(R.id.back_btn);ButtonbackCloseBtn=(Button)findViewById(R.id.back_close_btn);ButtonCloseBtn=(Button)findViewById(R.id.close_btn);backBtn.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewsource){Intentintent=newIntent(activity_second.this,MainActivity.class);startActivity(intent);}});backCloseBtn.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewsource){Intentintent=newIntent(activity_second.this,MainActivity.class);startActivity(intent);}});CloseBtn.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewsource){finish();}});}}7.1建立、配置和使用Activity運行結(jié)果如圖7-1所示。7.1建立、配置和使用Activity7.1.4?使用Bundle在Activity之間交換數(shù)據(jù)當(dāng)一個Activity啟動另一個Activity時,常常會有一些數(shù)據(jù)需要傳過去,這時,這兩個Activity之間就需要一個信使,即Intent,我們只需要將交換的數(shù)據(jù)放入Intent中就可以了。Intent提供了多個重載的方法來“攜帶”額外的數(shù)據(jù):(1)putExtras(Bundledata):向Intent中放入需要“攜帶”的數(shù)據(jù)包。(2)BundlegetExtras():取出Intent中所“攜帶”的數(shù)據(jù)包。(3)putExtra(Stringname,Xxxvalue):向Intent中按key-value的形式存入數(shù)據(jù)。(4)getXxxExtra(Stringname):從Intent中按key取出指定類型的數(shù)據(jù)。(5)putXxx(Stringkey,Xxxdata):向Bundle中放入Int,Long等各種類型的數(shù)據(jù)。(6)putSerializable(Stringkey,Serializabledata):向Bundle中放入一個可序列化的對象。(7)getXxx(Stringkey):從Bundle中取出Int,Long等各種類型的數(shù)據(jù)。(8)getSerializable(Stringkey,Serializabledata):從Bundle中取出一個可序列化的對象。7.1建立、配置和使用Activity【例7-2】兩個Activity之間通過Bundle交換數(shù)據(jù)。布局文件activity_main代碼如下:<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"xmlns:app="/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/area"android:paddingBottom="10sp"android:hint="請輸入所在地區(qū)"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/street"android:paddingBottom="10sp"android:hint="請輸入街道"android:layout_below="@+id/area"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="10sp"android:id="@+id/detail"android:hint="請輸入詳細(xì)地址"android:layout_below="@+id/street"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="10sp"android:id="@+id/name"android:hint="請輸入姓名"android:layout_below="@+id/detail"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="10sp"android:id="@+id/tel"android:hint="請輸入電話"android:layout_below="@+id/name"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/et_email"android:hint="請輸入郵箱"android:layout_below="@+id/tel"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/button"android:text="submit"android:layout_below="@id/et_email"/></RelativeLayout>7.1建立、配置和使用Activity該界面布局對應(yīng)的Java代碼如下:publicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Buttonbutton=findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Stringsite1=((EditText)findViewById(R.id.area)).getText().toString();Stringsite2=((EditText)findViewById(R.id.street)).getText().toString();Stringsite3=((EditText)findViewById(R.id.detail)).getText().toString();Stringname=((EditText)findViewById(R.)).getText().toString();Stringtel=((EditText)findViewById(R.id.tel)).getText().toString();Stringemail=((EditText)findViewById(R.id.et_email)).getText().toString();if(!"".equals(site1)&&!"".equals(site2)&&!"".equals(site3)&&!"".equals(name)&&!"".equals(tel)&&!"".equals(email)){Intentintent=newIntent(MainActivity.this,ResultActivity.class);Bundlebundle=newBundle();bundle.putCharSequence("name",name);bundle.putCharSequence("tel",tel);bundle.putCharSequence("site1",site1);bundle.putCharSequence("site2",site2);bundle.putCharSequence("site3",site3);intent.putExtras(bundle);startActivity(intent);}else{Toast.makeText(MainActivity.this,"請將地址填寫完整!",Toast.LENGTH_SHORT).show();}}});}}7.1建立、配置和使用Activity第二個Activity中,布局文件activity_result.xml代碼如下:<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"xmlns:app="/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/name"android:paddingBottom="10sp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/tel"android:layout_below="@id/name"android:paddingBottom="10sp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/site"android:layout_below="@id/tel"</RelativeLayout>7.1建立、配置和使用Activity該界面布局對應(yīng)的Java代碼如下:publicclassResultActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_result);Intentintent=getIntent();Bundlebundle=intent.getExtras();Stringname=bundle.getString("name");Stringtel=bundle.getString("tel");Stringsite=bundle.getString("site1")+bundle.getString("site2")+bundle.getString("site3");TextViewname_=findViewById(R.);TextViewtel_=findViewById(R.id.tel);TextViewsite_=findViewById(R.id.site);name_.setText(name);tel_.setText(tel);site_.setText(site);}}7.1建立、配置和使用Activity運行結(jié)果如圖7-2所示。7.2Activity的生命周期和啟動模式7.2.1?Activity的生命周期演示1.Activity生命周期的過程02010403系統(tǒng)會先調(diào)用onCreate方法,然后調(diào)用onStart方法,最后調(diào)用onResume,使Activity進(jìn)入運行狀態(tài)。啟動Activity系統(tǒng)會調(diào)用onResume方法,再次進(jìn)入運行狀態(tài)。當(dāng)前Activity由被覆蓋狀態(tài)回到前臺或解鎖屏系統(tǒng)會調(diào)用onPause方法,暫停當(dāng)前Activity的執(zhí)行。當(dāng)前Activity被其他Activity覆蓋其上或被鎖屏系統(tǒng)會先調(diào)用onPause方法,然后調(diào)用onStop方法,進(jìn)入停滯狀態(tài)。當(dāng)前Activity轉(zhuǎn)到新的Activity界面或按Home鍵回到主屏,自身退居后臺7.2Activity的生命周期和啟動模式2.Activity的三個關(guān)鍵循環(huán)整個生命周期從onCreate(Bundle)開始,到onDestroy()結(jié)束。Activity在onCreate()設(shè)置所有的“全局”狀態(tài),在onDestory()釋放所有的資源??梢姷纳芷趶膐nStart()開始,到onStop()結(jié)束。在這段時間,可以看到Activity在屏幕上,盡管它有可能不在前臺,不能和用戶交互。前臺的生命周期從onResume()開始,到onPause()結(jié)束。在這段時間里,該Activity處于所有Activity的最前面,和用戶進(jìn)行交互。Activity可以經(jīng)常性地在resume和pause狀態(tài)之間切換。7.2Activity的生命周期和啟動模式【例7-3】Activity生命周期實現(xiàn)的過程。首先是兩個Activity的程序,布局文件MainActivity代碼如下:<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/bt_btns"android:layout_width="130dp"android:layout_height="40dp"android:gravity="center"android:background="#ff0000"android:text="單擊按鈕"/></LinearLayout>7.2Activity的生命周期和啟動模式其對應(yīng)的Java代碼如下:publicclassMainActivityextendsActivity{privateButtonbt_btn;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bt_btn=(Button)findViewById(R.id.bt_btns);bt_btn.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){Intentintent=newIntent();intent.setClass(MainActivity.this,MainActivity2.class);intent.putExtra("updateData","你要傳的參數(shù)");startActivity(intent);}});System.out.println("onCreate");}@OverrideprotectedvoidonDestroy(){super.onDestroy();System.out.println("onDestroy");}@OverrideprotectedvoidonPause(){super.onPause();System.out.println("onPause");}@OverrideprotectedvoidonRestart(){super.onRestart();System.out.println("onRestart");}@OverrideprotectedvoidonResume(){super.onResume();System.out.println("onResume");}@OverrideprotectedvoidonStart(){super.onStart();System.out.println("onStart");}@OverrideprotectedvoidonStop(){super.onStop();System.out.println("onStop");}}7.2Activity的生命周期和啟動模式另外一個Activity文件MainActivity2代碼如下:publicclassMainActivity2extendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);this.setTitle("我是第二個Act!");}}7.2Activity的生命周期和啟動模式運行結(jié)果如圖7-3所示。7.2Activity的生命周期和啟動模式7.2.2?Activity的四種啟動模式standard標(biāo)準(zhǔn)模式,系統(tǒng)默認(rèn)模式每次啟動一個Activity都會重新創(chuàng)建一個新的實例,不管這個實例是否已經(jīng)存在。在這個模式下,誰啟動了Activity,那么這個Activity就運行在啟動它的那個Activity所在的棧中。singleTop棧頂復(fù)用模式在這種模式下,如果新的Activity已經(jīng)位于任務(wù)棧頂,那么此Activity不會被重新創(chuàng)建,同時它的onNewIntent方法會被回調(diào),通過此方法的參數(shù)我們可以取出當(dāng)前的請求信息。singleTask棧內(nèi)復(fù)用模式這是一種單例模式,在這種模式下,只要Activity在一個棧中存在,那么無論幾次啟動此Activity都不會創(chuàng)建實例,和singleTop一樣,系統(tǒng)也會調(diào)用onNewIntent。還有一點,就是singleTask有clearTop的效果,會導(dǎo)致棧內(nèi)已有的Activity全部出棧。singleInstance單實例模式這是一種加強的singleTask模式,它除了具有singleTask的所有特性以外,還加強了一點,那就是具有此模式的Activity只能單獨位于一個任務(wù)棧中,比如ActivityA是ingleInstance模式,當(dāng)A啟動后,系統(tǒng)會為它創(chuàng)建一個新的任務(wù)棧,然后A獨自在這個新的任務(wù)棧中,由于棧內(nèi)復(fù)用的特性,后續(xù)均不會創(chuàng)建新的Activity,除非這個獨特的任務(wù)棧被系統(tǒng)銷毀。7.2Activity的生命周期和啟動模式給Activity指定啟動模式方法一:通過AndroidMenifest.xml,代碼如下:<activityandroid:name="com.ryg.chapter_1.SecondActivity"android:configChanges="screenLayout"android:label="@string/app_name"android:launchMode="standard"android:taskAffinity="com.ryg.task1"/>方法二:通過Intent中設(shè)置標(biāo)志位來為Activity指定啟動模式,代碼如下:Intentintent=newIntent();intent.setClass(MainActivity.this,SecondActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);*區(qū)別:首先,在優(yōu)先級上,第二種方式優(yōu)先級要高于第一種,當(dāng)兩種同時存在的時候,以第二種方式為準(zhǔn),第一種方式無法直接為Activity設(shè)置FLAG_ACTIVITY_CLEAR_TOP標(biāo)識,而第二種方式無法為Activity指定singleInstance模式。7.3Fragment詳解7.3.1?Fragment的生命周期(1)當(dāng)一個Fragment被創(chuàng)建的時候,它會經(jīng)歷以下狀態(tài):onAttach()onCreate()onCreateView()onActivityCreated()(2)當(dāng)這個Fragment對用戶可見的時候,它會經(jīng)歷以下狀態(tài):onStart()onResume()(3)當(dāng)這個Fragment進(jìn)入“后臺模式”的時候,它會經(jīng)歷以下狀態(tài):onPause()onStop()7.3Fragment詳解(4)當(dāng)這個Fragment被銷毀了(或者持有它的Activity被銷毀了),它會經(jīng)歷以下狀態(tài):onPause()onStop()onDestroyView()onDestroy()onDetach()就像Activitie一樣,在以下的狀態(tài)中,可以使用Bundle對象保存一個Fragment的對象。onCreate()onCreateView()onActivityCreated()Fragment的大部分狀態(tài)都和Activitie很相似,但Fragment又有一些新的狀態(tài)。onAttached()//當(dāng)Fragment被加入Activity時調(diào)用onCreateView()//當(dāng)Activity要得到Fragment的Layout時,調(diào)用此方法onActivityCreated()//當(dāng)Activity的onCreated()方法返回后調(diào)用此方法onDestroyView()//當(dāng)Fragment中的視圖被移除的時候,調(diào)用這個方法。onDetach()//當(dāng)Fragment和Activity分離的時候,調(diào)用這個方法。7.3Fragment詳解7.3.2?創(chuàng)建Fragment1.創(chuàng)建Fragment類【例7-4】定義一個Fragment的布局,代碼如下:publicclassArticleFragmentextendsFragment{@OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){//在這里定義Fragment的布局returninflater.inflate(R.layout.activity_article_fragment,container,false);}}7.3Fragment詳解2.使用XML布局代碼向Activity添加Fragment【例7-5】在屏幕比較大的情況下,在Activity上添加兩個Fragment(在路徑名中帶有l(wèi)arge的修飾符)。布局代碼如下:<LinearLayoutxmlns:android="/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"><fragmentandroid:name="com.example.a732.ArticleFragment"android:id="@+id/headlines_fragment"android:layout_weight="1"android:layout_width="0dp"android:layout_height="match_parent"/><fragmentandroid:name="com.example.a732.ArticleFragment"android:id="@+id/article_fragment"android:layout_weight="2"android:layout_width="0dp"android:layout_height="match_parent"/></LinearLayout>7.3Fragment詳解Java代碼如下:publicclassMainActivityextendsFragmentActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}7.3Fragment詳解以上運行結(jié)果如圖7-4所示。7.3Fragment詳解7.3.3?Fragment與Activity的通信過程方式
1:可以通過getSupportFragmentManager()拿到FragmentManager,然后通過FragmentManager的findFragmentByTag或者findFragmentById拿到需要通信的Fragment(比如說在下面的DEMO中我們用的是FragmentTabHost,所以就使用findFragmentByTag拿到Fragment,如果Fragment是直接在XML中定義的,那么就使用findFragmentById拿到Fragment),然后就可以對拿到的Fragment進(jìn)行各種操作了。方式2:為了降低代碼之間的耦合,我們可以通過回調(diào)實現(xiàn)Fragment之間的通信。7.3Fragment詳解【例7-6】Fragment與Activity的通信過程。main.xml代碼如下:<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal"><LinearLayoutandroid:id="@+id/left_layout"android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_weight="1"android:orientation="vertical"></LinearLayout><LinearLayoutandroid:id="@+id/right_layout"android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_weight="10"android:orientation="vertical"></LinearLayout></LinearLayout>7.3Fragment詳解leftfragment.xml代碼如下:<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/first_button"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="first_button"/><Buttonandroid:id="@+id/second_button"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="second_button"/><Buttonandroid:id="@+id/third_button"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="third_button"/></LinearLayout>7.3Fragment詳解rightfragment.xml代碼如下:<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/right_show_message"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@android:color/holo_orange_dark"android:textColor="@android:color/white"/></LinearLayout>7.3Fragment詳解FirstActivity.java代碼如下:publicclassFirstActivityextendsActivityimplementsLeftFragment.MyListener{publicvoidshowMessage(intindex){if(1==index)showMessageView.setText("第一頁");if(2==index)showMessageView.setText("第二頁");if(3==index)showMessageView.setText("第三頁");}/**得到RightFragment中顯示信息的控件*/privateTextViewshowMessageView;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);System.out.println("Activity--->onCreate");FragmentManagermanager=getFragmentManager();FragmentTransactiontransaction=manager.beginTransaction();//動態(tài)增加FragmentRightFragmentrightFragment=newRightFragment();LeftFragmentleftFragment=newLeftFragment();transaction.add(R.id.left_layout,leftFragment,"leftfragment");transaction.add(R.id.right_layout,rightFragment,"rightfragment");mit();}@OverrideprotectedvoidonResume(){super.onResume();System.out.println("Activity--->onResume");showMessageView=(TextView)findViewById(R.id.right_show_message);}}7.3Fragment詳解LeftActivity.java代碼如下:publicclassLeftFragmentextendsFragment{publicinterfaceMyListener{publicvoidshowMessage(intindex);}privateMyListenermyListener;privateButtonfirstButton;privateButtonsecondButton;privateButtonthirdButton;/**Fragment第一次附屬于Activity時調(diào)用,在onCreate之前調(diào)用*/@OverridepublicvoidonAttach(Activityactivity){super.onAttach(activity);System.out.println("LeftFragment--->onAttach");myListener=(MyListener)activity;}@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInsta
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公共設(shè)施管理與維護(hù)操作手冊(標(biāo)準(zhǔn)版)
- 車站人員考勤管理制度
- 財務(wù)管理制度
- 辦公室員工培訓(xùn)課程更新制度
- 辦公室出差與報銷管理制度
- 2026年錫山城發(fā)集團(tuán)公開招聘5人備考題庫及完整答案詳解1套
- 人教版初中語文七下《駱駝祥子》基礎(chǔ)復(fù)習(xí)必刷題(附答案)
- 2026年葫蘆島市南票區(qū)政府專職消防隊員招聘37人備考題庫及參考答案詳解一套
- 關(guān)于選聘“警民聯(lián)調(diào)”室專職人民調(diào)解員20人的備考題庫參考答案詳解
- 2026年靈臺縣人民法院招聘備考題庫有答案詳解
- 2025年體育教師個人年終述職報告
- 實際問題與一次函數(shù)課件2025-2026學(xué)年人教版八年級數(shù)學(xué)下冊
- 2025年天津科技大學(xué)毛澤東思想和中國特色社會主義理論體系概論期末考試模擬題及答案1套
- 2024年鹽城市體育局直屬事業(yè)單位招聘真題
- 南方航空安全員培訓(xùn)
- 2025-2026學(xué)年嶺南美版(新教材)初中美術(shù)七年級上冊期末綜合測試卷及答案
- DB11∕T 2398-2025 水利工程巡視檢查作業(yè)規(guī)范
- 2025秋國家開放大學(xué)《政府經(jīng)濟學(xué)》期末機考精準(zhǔn)復(fù)習(xí)題庫
- 2025-2026學(xué)年教科版(新教材)二年級上冊科學(xué)全冊知識點梳理歸納
- MDT在老年髖部骨折合并癥患者中的應(yīng)用策略
- PCB設(shè)計規(guī)范-MD元器件封裝庫尺寸要求
評論
0/150
提交評論