AndroidStudio項(xiàng)目開發(fā)教程-從基礎(chǔ)入門到樂享開發(fā) 課件 第四章 基本程序單元Activity_第1頁
AndroidStudio項(xiàng)目開發(fā)教程-從基礎(chǔ)入門到樂享開發(fā) 課件 第四章 基本程序單元Activity_第2頁
AndroidStudio項(xiàng)目開發(fā)教程-從基礎(chǔ)入門到樂享開發(fā) 課件 第四章 基本程序單元Activity_第3頁
AndroidStudio項(xiàng)目開發(fā)教程-從基礎(chǔ)入門到樂享開發(fā) 課件 第四章 基本程序單元Activity_第4頁
AndroidStudio項(xiàng)目開發(fā)教程-從基礎(chǔ)入門到樂享開發(fā) 課件 第四章 基本程序單元Activity_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第4章 基本程序單元Activity安卓·入門與開發(fā)目錄4.1 Activity概述4.2 創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity4.3 多個(gè)Activity的使用4.4 使用Fragment4.5 購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞Android應(yīng)用開發(fā)有四個(gè)基本組件,分別是活動(dòng)(Activity)、服務(wù)(Service)、廣播接收者(BroadcastReceiver)和內(nèi)容提供者(ContentProvier)。其中,Activity是Android應(yīng)用最常見的組件之一,它的中文意思是活動(dòng)。在Android應(yīng)用程序中,布局文件代表了用戶看到的前端可視化界面,Activity則代表了可視化界面后臺(tái)實(shí)現(xiàn)的功能。換句話說,布局和Activity共同實(shí)現(xiàn)了用戶在APP上進(jìn)行操作的人機(jī)交互功能。在一個(gè)Android應(yīng)用中可以有多個(gè)Activity,這些Activity組成了Activity棧(Stack),當(dāng)前活動(dòng)的Activity位于棧頂,之前的Activity被壓入下面成為非活動(dòng)Activity,等待是否可能被恢復(fù)為活動(dòng)狀態(tài)。在Activity的生命周期中,有如表所示的4個(gè)重要狀態(tài)。狀態(tài)描述運(yùn)行狀態(tài)當(dāng)Activity位于棧頂時(shí),這時(shí)活動(dòng)就處于運(yùn)行狀態(tài),用戶可見。最不會(huì)被系統(tǒng)回收的就是運(yùn)行狀態(tài)的活動(dòng)暫停狀態(tài)失去焦點(diǎn)的Activity,仍然可見,但是內(nèi)存低的情況下,不能被系統(tǒng)回收。停止?fàn)顟B(tài)當(dāng)Activity不處于棧頂位置,且完全不可見的時(shí)候,就進(jìn)入停止?fàn)顟B(tài),當(dāng)內(nèi)存較低時(shí)系統(tǒng)會(huì)回收這樣的活動(dòng)銷毀狀態(tài)該Activity結(jié)束,或Activity所在的虛擬器進(jìn)程結(jié)束。4.1Activity概述在了解了Activity的4個(gè)重要狀態(tài)后,再來看圖,該圖顯示Activity的各種重要狀態(tài)(活動(dòng)指Activity),以及相關(guān)的回調(diào)方法。4.1Activity概述4.1Activity概述在圖4.1中,矩形方塊表示的內(nèi)容為可以被回調(diào)的方法,而有底色的橢圓形則表示Activity的重要狀態(tài)。從該圖可以看出,在一個(gè)Activity的生命周期中有一些方法會(huì)被系統(tǒng)回調(diào),這些方法及其描述如表所示。方法描述onCreate()Activity第一次啟動(dòng)時(shí)被調(diào)用,在該方法中初始化Activity所能使用的全局資源和狀態(tài),如:綁定事件,創(chuàng)建線程等。onStart()當(dāng)Activity對(duì)用戶可見時(shí)調(diào)用,即Activity展現(xiàn)在前端,該方法一般用來初始化或啟動(dòng)與更新界面相關(guān)的資源onResume()當(dāng)用戶與Activity進(jìn)行交互時(shí)被調(diào)用,此時(shí)Activity位于返回棧的棧頂,并處于運(yùn)行狀態(tài),該方法完成一些輕量級(jí)的工作,避免用戶等待onPause()啟動(dòng)或恢復(fù)另一個(gè)Activity的時(shí)候被調(diào)用,該方法一般用來保存界面的持久信息,提交未保存的數(shù)據(jù),并釋放消耗CPU的資源。onStop()該方法在Activity不可見狀態(tài)時(shí)調(diào)用,如:其他Activity啟動(dòng)或恢復(fù)并將其覆蓋時(shí)調(diào)用。onDestroy()在Activity銷毀之前被調(diào)用。onRestart()當(dāng)Activity重新啟動(dòng)時(shí)調(diào)用。4.1Activity概述4.1Activity概述4.1 Activity概述4.2 創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity4.3 多個(gè)Activity的使用4.4 使用Fragment4.5 購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞4.2 創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity4.2.1創(chuàng)建Activity4.2.2配置Activity4.2.3啟動(dòng)和關(guān)閉Activity目錄4.2.4Intent介紹4.2.5顯式Intent和隱式Intent在使用Activity時(shí),需要先對(duì)其進(jìn)行創(chuàng)建和配置,然后才可以啟動(dòng)或關(guān)閉Activity。下面將詳細(xì)介紹創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity的方法。使用AndroidStudio也可以很方便地創(chuàng)建Activity,具體步驟如下:

(1)在app節(jié)點(diǎn)上單擊鼠標(biāo)右鍵,在彈出快捷菜單上依次選擇New>Activity>EmptyActivity,如圖4.2所示。

圖4.2創(chuàng)建EmptyActivity4.2.1創(chuàng)建Activity(2)在彈出地對(duì)話框中修改Activity的名稱,如圖4.3所示。

圖4.3修改activity名稱圖(3)單擊Finish按鈕即可創(chuàng)建一個(gè)空的Activity和與之對(duì)應(yīng)的布局文件。

4.2 創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity目錄4.2.1創(chuàng)建Activity4.2.2配置Activity4.2.3啟動(dòng)和關(guān)閉Activity4.2.4Intent介紹4.2.5顯式Intent和隱式Intent使用AndroidStudio向?qū)?chuàng)建Activity后,會(huì)自動(dòng)在AndroidManifest.xml文件中配置與注冊(cè)該Activity。配置Activity的基本格式如下:4.2.2配置Activity<activityandroid:name="實(shí)現(xiàn)類":指定對(duì)應(yīng)的Activity實(shí)現(xiàn)類android:lable="說明性文字":指定標(biāo)簽android:theme="主題":設(shè)置要應(yīng)用的主題?!?gt;<intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity><activityandroid:name=".MainActivity"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity>4.2創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity4.2 創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity目錄4.2.1創(chuàng)建Activity4.2.2配置Activity4.2.3啟動(dòng)和關(guān)閉Activity4.2.4Intent介紹4.2.5顯式Intent和隱式Intent1、啟動(dòng)Activity啟動(dòng)Activity分為以下兩種

在一個(gè)Android應(yīng)用中只存在一個(gè)Activity時(shí),那么只需要在AndroidManifest.xml文件中對(duì)其進(jìn)行配置,并且將其設(shè)置為程序的入口,這樣,當(dāng)運(yùn)行該項(xiàng)目時(shí),將自動(dòng)啟動(dòng)該Activity。

在一個(gè)Android應(yīng)用中存在多個(gè)Activity時(shí),需要應(yīng)用startActivity方法來啟動(dòng)需要的Activity。StartActivity方法的語法格式如下:

該方法沒有返回值,只有一個(gè)Intent類型的入口參數(shù)。Intent是Android應(yīng)用里各組件之間的通信方式,一個(gè)Activity通過Intent表達(dá)自己的“意圖”。在創(chuàng)建Intent對(duì)象時(shí),需要指定想要被啟動(dòng)的Activity。例如,要啟動(dòng)一個(gè)名稱為“ShoppingCartActivity”的Activity,可以使用下面的代碼:4.2.3啟動(dòng)和關(guān)閉ActivitypublicvoidstartActivity(Intentintent)Intentintent=newIntent(MainActivity.this,ShoppingCartActivity.class);startActivity(intent);4.2創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity

在Android中,如果想要關(guān)閉當(dāng)前的Activity,可以使用Activity類提供的finish方法。finish方法的語法格式如下:該方法的使用比較簡(jiǎn)單,既沒有入口參數(shù),也沒有返回值,只需要在Activity中相應(yīng)的事件中調(diào)用該方法即可。4.2.3啟動(dòng)和關(guān)閉ActivityPublicvoidfinish()4.2創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity2.關(guān)閉Activity4.2 創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity目錄4.2.1創(chuàng)建Activity4.2.2配置Activity4.2.3啟動(dòng)和關(guān)閉Activity4.2.4Intent介紹4.2.5顯式Intent和隱式IntentIntent中文意思為“意圖”。它是Android程序中傳輸數(shù)據(jù)的核心對(duì)象,在Android官方文檔中,對(duì)Intent的定義是執(zhí)行某操作的一個(gè)抽象描述。它可以開啟新的Activity,也可以發(fā)送廣播消息,或者開啟Service服務(wù)。下面將對(duì)Intent及其基本應(yīng)用分別進(jìn)行介紹。一個(gè)Android應(yīng)用程序主要是由Activity、Service和BroadcastReceiver三種組件組成,三種組件是獨(dú)立的,它們之間可以互相調(diào)用、協(xié)調(diào)工作,最終組成一真正Android程序。這些組件之間的通信主要由Intent協(xié)助完成。Intent負(fù)責(zé)對(duì)應(yīng)用中一次操作的Action(動(dòng)作)涉及的Data(數(shù)據(jù))、Extras(附加數(shù)據(jù))進(jìn)行描述,Android則根據(jù)Intent的描述找到相應(yīng)的組件,將Intent傳遞給調(diào)用的組件并完成組件的調(diào)用。因此,Intent在這里起著一個(gè)媒體中介的作用,專門提供組件間互相調(diào)用的相關(guān)信息,實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的解耦。4.2.4Intent介紹4.2創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity4.2 創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity目錄4.2.1創(chuàng)建Activity4.2.2配置Activity4.2.3啟動(dòng)和關(guān)閉Activity4.2.4Intent介紹4.2.5顯式Intent和隱式Intent顯式Intent是指在創(chuàng)建Intent對(duì)象時(shí)就指定接收者(如Activity、Service或者BroadcastReceiver),因?yàn)橐呀?jīng)知道要啟動(dòng)的Activity或者Service的類名稱。這里以Activity為例介紹如何使用顯式Intent。在啟動(dòng)Activity時(shí)必須在Intent中指明要啟動(dòng)的Activity所在的類。通常情況下,在一個(gè)Android項(xiàng)目中,如果只有一個(gè)Activity那么只需要在AndroidManifest.xml文件中配置,并且將其設(shè)置為程序的入口。這樣,當(dāng)運(yùn)行該項(xiàng)目時(shí)將自動(dòng)啟動(dòng)該Activity。否則,需要應(yīng)用Intent和startActivity方法來啟動(dòng)需要的Activity,即通過顯式Intent來啟動(dòng),具體步驟如下:創(chuàng)建Intent對(duì)象,可以使用下面的語法格式:Intentintent=newIntent(ContextpackageContext,Class<?>cls)intent:用于指定對(duì)象名稱。packageContext:用于指定一個(gè)啟動(dòng)Activity的上下文對(duì)象,如MainActivity.this;cls:用于指定要啟動(dòng)Activity所在的類,如ShoppingCartActivity.class;例如,創(chuàng)建一個(gè)啟動(dòng)ShoppingCartActivity的Intent對(duì)象,可使用下面的代碼:Intentintent=newIntent(MainActivity.this,ShoppingCartActivity.class);創(chuàng)建Intent對(duì)象后用startActivity方法來啟動(dòng)startActivity(intent);4.2.5顯式Intent和隱式Intent4.2創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity顯式Intent隱式Intent是指在創(chuàng)建Intent對(duì)象時(shí)不指定具體的接收者,而是定義要執(zhí)行的Action、Category和Data,然后讓Android系統(tǒng)根據(jù)相應(yīng)的匹配機(jī)制找到要啟動(dòng)的Activity。使用隱式Intent啟動(dòng)Activity時(shí),需要為Intent對(duì)象定義Action、Category和Data屬性,然后再調(diào)用startActivity方法來啟動(dòng)匹配的Activity。例如,要在自己的應(yīng)用程序中展示一個(gè)網(wǎng)頁,就可以直接調(diào)用系統(tǒng)的瀏覽器來打開這個(gè)網(wǎng)頁,而不必自己再編寫一個(gè)瀏覽器??梢允褂孟旅娴恼Z句實(shí)現(xiàn):也可以使用下面的語句實(shí)現(xiàn)。4.2.5顯式Intent和隱式Intent//創(chuàng)建Intent對(duì)象Intentintent=newIntent(Intent.ACTION_VIEW,Uri.parse(“”));//將Intent傳遞給ActivitystartActivity(intent);Intentintent=newIntent();//創(chuàng)建Intent對(duì)象intent.setAcition(Intent.ACTION_VIEW);//為Intent設(shè)置動(dòng)作intent,setData=(Uri.parse(“”));//為Intent設(shè)置數(shù)據(jù)startActivity(intent);//將Intent傳遞給Activity4.2創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity隱式IntentIntent.ACTION_VIEW為Intent的Action,表示需要執(zhí)行的動(dòng)作。Android系統(tǒng)支持的標(biāo)準(zhǔn)Action字符串常量如表所示。Action常量對(duì)應(yīng)字符串簡(jiǎn)單說明ACTION_MAINent.action.MAIN應(yīng)用程序入口ACTION_VIEWent.action.VIEW顯示指定數(shù)據(jù)ACTION_ATTACH_DATAent.action.ATTACH_DATA指定某塊數(shù)據(jù)將被附加到其它地方ACTION_EDITent.action.EDIT編輯指定數(shù)據(jù)ACTION_PICKent.action.PICK從列表中選擇某項(xiàng)并返回所選的數(shù)據(jù)ACTION_CHOOSERent.action.CHOOSER顯示一個(gè)Activity選擇器ACTION_GET_CONTENTent.action.GET_CONTENT讓用戶選擇數(shù)據(jù),并返回所選數(shù)據(jù)ACTION_DIALent.action.DIAL顯示撥號(hào)面板ACTION_CALLent.action.CALL直接向指定用戶打電話ACTION_SENDent.action.SEND向其他人發(fā)送數(shù)據(jù)ACTION_SENDTOent.action.SENDTO向其他人發(fā)送消息ACTION_ANSWERent.action.ANSWER應(yīng)答電話ACTION_INSERTent.action.INSERT插入數(shù)據(jù)ACTION_DELETEent.action.DELETE刪除數(shù)據(jù)ACTION_RUNent.action.RUN運(yùn)行維護(hù)ACTION_SYNCent.action.SYNC執(zhí)行數(shù)據(jù)同步ACTION_PICK_ACTIVITYent.action.PICK_ACTIVITY用于選擇ActivityACTION_SEARCHent.action.SEARCH執(zhí)行搜索ACTION_WEB_SEARCHent.action.WEB_SEARCH執(zhí)行Web搜索ACTION_FACTORY_TESTent.action.FACTORY_TEST工廠測(cè)試的入口點(diǎn)4.2.5顯式Intent和隱式Intent4.2創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity4.1 Activity概述4.2 創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity4.3 多個(gè)Activity的使用4.4 使用Fragment4.5 購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞4.3.1使用Bundle在Activity之間交換數(shù)據(jù)4.3 多個(gè)Activity的使用4.3.2調(diào)用另一個(gè)Activity并返回結(jié)果目錄在Android應(yīng)用中經(jīng)常會(huì)使用多個(gè)Activity,而這些Activity之間又經(jīng)常需要交換數(shù)據(jù)。下面就來介紹如何使用Bundle在Activity之間交換數(shù)據(jù),以及如何調(diào)用另一個(gè)Activity并返回結(jié)果。當(dāng)在一個(gè)Activity中啟動(dòng)另一個(gè)Activity時(shí),經(jīng)常需要傳遞一些數(shù)據(jù)。這時(shí)就可以通過Intent來實(shí)現(xiàn),因?yàn)镮ntent通常被稱為兩個(gè)Activity之間的信使,通過將要傳遞的數(shù)據(jù)保存在Intent中,就可以將其傳遞到另一個(gè)Activity中去。在Android中可以先將要保存的數(shù)據(jù)存放在一個(gè)Bundle對(duì)象中,然后通過Intent提供的putExtras方法將要攜帶的Bundle對(duì)象保存到Intent中,最后通過執(zhí)行Intent將數(shù)據(jù)傳遞出去。通過Intent傳遞數(shù)據(jù)的示意圖如圖4.4所示。圖4.4通過Intent傳遞數(shù)據(jù)Bundles是一個(gè)鍵值對(duì),用于保存要傳遞的數(shù)據(jù)包,數(shù)據(jù)類型可以為boolean、byte、int、long、double和String等基本類型或者對(duì)應(yīng)的數(shù)組,也可以是對(duì)象或者對(duì)象數(shù)組。4.3.1使用Bundle在Activity之間交換數(shù)據(jù)4.3多個(gè)Activity的使用4.3.1使用Bundle在Activity之間交換數(shù)據(jù)4.3.2調(diào)用另一個(gè)Activity并返回結(jié)果4.3 多個(gè)Activity的使用目錄

在Android應(yīng)用開發(fā)時(shí),有時(shí)需要在一個(gè)Activity中調(diào)用另一個(gè)Activity,當(dāng)用戶在Activity中選擇完成后,程序?qū)⒆詣?dòng)返回到第一個(gè)Activity中,第一個(gè)Activity能夠獲取并顯示用戶在第二個(gè)Activity中選擇的結(jié)果。例如:程序中經(jīng)常出現(xiàn)的“返回上一步”功能,可以通過Intent和Bundle來實(shí)現(xiàn),與在兩個(gè)Activity之間交換數(shù)據(jù)不同的是:此處需要使用startActivityForResult方法來啟動(dòng)另外一個(gè)Activity。調(diào)用startActivityForResult方法啟動(dòng)新Activity后,一旦關(guān)閉新啟動(dòng)的Activity,可以將選擇的結(jié)果返回到原Activity中。startActivityForResult方法的語法格式如下:該方法將以指定的請(qǐng)求碼啟動(dòng)Activity,并且程序?qū)?huì)獲取新啟動(dòng)的Activity返回的結(jié)果(通過重寫onActivityResult方法來獲?。equestCode參數(shù)代表啟動(dòng)Activity的請(qǐng)求碼,該請(qǐng)求碼的值由開發(fā)者根據(jù)業(yè)務(wù)自行設(shè)置,用于標(biāo)志請(qǐng)求來源。4.3多個(gè)Activity的使用4.3.2調(diào)用另一個(gè)Activity并返回結(jié)果PublicvoidstartActivityForResult(Intentintent,intrequestCode)4.1 Activity概述4.2 創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity4.3 多個(gè)Activity的使用4.4 使用Fragment4.5 購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞目錄Fragment是Android3.0新增的概念,其中文意思是“碎片”,它與Activity十分相似,用來在一個(gè)Activity中描述一些行為或一部分用戶界面。使用多個(gè)Fragment可以在一個(gè)單獨(dú)Activity中建立多個(gè)UI面板,也可以在多個(gè)Activity中重用Fragment。例如,商城主界面就相當(dāng)于一個(gè)Activity,在這個(gè)Activity中包含多個(gè)Fragment,底部4個(gè)功能界面相當(dāng)于4個(gè)Fragment,可以隨意切換。布局如圖4.5所示。圖4.5商城首頁底部布局4.4 使用Fragment4.1 Activity概述4.2 創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity4.3 多個(gè)Activity的使用4.4 使用Fragment4.5 購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞4.4.1Fragment的生命周期4.4.2創(chuàng)建Fragment4.4.3在Activity中添加Fragment目錄4.4 使用FragmentFragment和Activity一樣有自己的生命周期。一個(gè)Fragment必須被嵌入到一個(gè)Activity中,它的生命周期直接受其所屬的宿主Activity的生命周期影響。例如,當(dāng)Activity被暫停時(shí),其中的所有Fragment也被暫停;當(dāng)Activity被銷毀時(shí),所有隸屬于它的Fragment也將被銷毀。然而,當(dāng)一個(gè)Activity正在運(yùn)行時(shí)(處于resumed狀態(tài)),可以單獨(dú)地對(duì)每一個(gè)Fragment進(jìn)行操作,如添加或刪除等。Fragment的完整生命周期如圖所示。4.4使用Fragment4.4.1Fragment的生命周期4.4.1Fragment的生命周期4.4.2創(chuàng)建Fragment4.4.3在Activity中添加Fragment4.4 使用Fragment目錄

創(chuàng)建一個(gè)Fragment'必須創(chuàng)建一個(gè)Fragment的子類,或者繼承另一個(gè)己經(jīng)存在的Fragment的子類。例如,要?jiǎng)?chuàng)建一個(gè)名稱為“MineFragment”的Fragment”,并重寫onCreateView方法,可以使用下面的代碼:4.4使用Fragment4.4.2創(chuàng)建FragmentpublicclassMineFragmentextendsFragment{@Nullable@Override publicViewonCreateView(LayoutInflaterinflater,@Nullable ViewGroupcontainer,@NullableBundlesavedInstanceState){ Viewview=inflater.inflate(setLayoutID(),container,false); initView(view);//初始化控件 returnview; }}4.4.1Fragment的生命周期4.4.2創(chuàng)建Fragment4.4.3在Activity中添加Fragment4.4 使用Fragment目錄直接在布局文件中添加Fragment。直接在布局文件中添加Fragment可以使用<fragment></fragment>標(biāo)記實(shí)現(xiàn)。<LinearLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"tools:context="com.example.administrator.fragmenttest.MainActivity"><fragmentandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:name="com.example.administrator.fragmenttest.LeftFragment"tools:layout="@layout/left_layout"/><fragmentandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="3"android:name="com.example.administrator.fragmenttest.RightFragment"tools:layout="@layout/right_layout"/></LinearLayout>4.4使用Fragment4.4.3在Activity中添加Fragment2、在Activity

運(yùn)行時(shí)添加Fragment在Activity

運(yùn)行時(shí),也可以將Fragment

添加到Activity

的布局中,實(shí)現(xiàn)方法是:首先獲取一個(gè)FragmentTransaction的實(shí)例;然后使用add方法添加一個(gè)Fragment,其中add方法的第一個(gè)參數(shù)是Fragment要放入的ViewGroup(由ResourceID指定),第二個(gè)參數(shù)是需要添加的Fragment;最后為了使改變生效,還必須調(diào)用commit方法提交事務(wù)。4.4.3在Activity中添加FragmentfragmentManager=getFragmentManager();FragmentTransactiontransaction=getSupportFragmentManager().beginTransaction();//實(shí)例化要管理的fragmentMineFragmentmineFragment=newMineFragment();//通過添加(事務(wù)處理的方式)將fragment加到對(duì)應(yīng)的布局中transaction.add(R.id.right,mineFragment);//事務(wù)處理完需要提交mit();4.4使用Fragment4.1 Activity概述4.2 創(chuàng)建、配置、啟動(dòng)和關(guān)閉Activity4.3 多個(gè)Activity的使用4.4 使用Fragment4.5 購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞4.5.1商城首頁的頁面切換4.5.2個(gè)人中心-登錄-注冊(cè)頁面的跳轉(zhuǎn)4.5.3登錄后跳轉(zhuǎn)個(gè)人中心目錄4.5 購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞在章節(jié)三中介紹了商城底部頁面切換的原理,這里結(jié)合這章所講Fragment碎片真正實(shí)現(xiàn)商城底部的頁面切換。1、首先在MainActivity類里新建selectFragmentShow方法和addFragment方法。selectFragmentShow方法用于選擇要顯示的Fragment。在該方法中,首選判斷Fragment集合中是否有元素,如果沒有則調(diào)用addFragment方法添加。然后通過for語句判斷Fragment集合中是否有選擇的元素;如果有則讓其顯示,并將其他的Fragment隱藏,否則添加并顯示。addFragment方法用于往Fragment集合添加元素。在該方法中根據(jù)FragmentTransaction管理器和fragment對(duì)象,添加元素并返回fragment集合。2、在包節(jié)點(diǎn)上單擊鼠標(biāo)右鍵,在彈出快捷菜單上依次選擇New>Package,新建Fragment包,專門用于存放Fragment代碼。3、在Fragment包節(jié)點(diǎn)上單擊鼠標(biāo)右鍵,出快捷菜單上,選擇新建空白Fragment,命名為HomeFragment的首頁碎片。4、點(diǎn)擊finish會(huì)自動(dòng)生成fragment代碼和xml布局文件。5、后續(xù)會(huì)用到fragment的一些常用方法,為方便開發(fā),創(chuàng)建一個(gè)公用基礎(chǔ)類BaseFragment(1)在fragment包內(nèi),創(chuàng)建base包,用于存放公用基礎(chǔ)類。(2)在base包內(nèi),新建基礎(chǔ)類BaseFragment,繼承Fragment類。(3)聲明上下文對(duì)象和Activity對(duì)象。(4)重寫onAttach方法,當(dāng)視圖被加載到Activity中時(shí)候調(diào)用。(5)重寫onCreateView等方法,用于初始化控件、設(shè)置監(jiān)聽、設(shè)置功能等。6、在fragment包節(jié)點(diǎn)上單擊鼠標(biāo)右鍵,在彈出快捷菜單上,新建fragment,命名為HomeFragment,繼承BaseFragment并實(shí)現(xiàn)View.OnClickListener監(jiān)聽器接口,然后重寫setLayoutID()等方法,設(shè)置布局頁面。7、同理創(chuàng)建一個(gè)Mineframent個(gè)人中心碎片,用于展示個(gè)人中心8、回到MainActivity類,在選擇切換界面onCheckedChanged方法里,選擇要顯示的Fragment。如首頁HomeFragment和個(gè)人中心MineFragment。4.5.1商城底部的頁面切換4.5購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞9、運(yùn)行項(xiàng)目,即可實(shí)現(xiàn)如圖4.10所示的商城底部“首頁”和“個(gè)人中心”的頁面切換。圖4.10商城底部切換圖4.5.1商城底部的頁面切換4.5購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞4.5.1商城首頁的頁面切換4.5.2個(gè)人中心-登錄-注冊(cè)頁面的跳轉(zhuǎn)4.5.3登錄后跳轉(zhuǎn)個(gè)人中心4.5 購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞目錄在個(gè)人中心頁面,用戶要登錄才能看到個(gè)人的相關(guān)信息,需要給fragment_mine幀布局的“登錄/注冊(cè)”textView組件在MineFragment類里添加一個(gè)點(diǎn)擊監(jiān)聽事件,點(diǎn)擊則跳轉(zhuǎn)至登錄頁面。步驟是,先聲明TextView控件變量,然后重寫initView方法初始化綁定TextView,重寫setListener方法,在其中為TextView設(shè)置點(diǎn)擊監(jiān)聽器對(duì)象,最后重寫Onclick方法實(shí)現(xiàn)點(diǎn)擊跳轉(zhuǎn)。4.5.2個(gè)人中心-登錄-注冊(cè)頁面的跳轉(zhuǎn)privateTextViewlogin;//登錄/注冊(cè)文本框@OverridepublicvoidinitView(Viewview){super.initView(view);login=(TextView)view.findViewById(R.id.custom_login);}@OverridepublicvoidsetListener(){login.setOnClickListener(this);}@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.custom_login://登錄注冊(cè)文本框//跳轉(zhuǎn)至登錄頁面Intentintent=newIntent(getActivity(),LoginActivity.class);startActivity(intent);break;}}4.5購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞運(yùn)行項(xiàng)目,點(diǎn)擊登錄注冊(cè)文本跳轉(zhuǎn)至登錄頁面。如圖4.11所示。圖4.11個(gè)人中心-登錄跳轉(zhuǎn)圖4.5.2個(gè)人中心-登錄-注冊(cè)頁面的跳轉(zhuǎn)4.5購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞

在LoginActivity中聲明、初始化“馬上注冊(cè)”textView文本組件,在onClick方法里監(jiān)聽點(diǎn)擊事件跳轉(zhuǎn)至注冊(cè)頁面,具體代碼如下:運(yùn)行項(xiàng)目,點(diǎn)擊“馬上注冊(cè)按鈕”即可完成跳轉(zhuǎn)。如圖4.12所示圖4.12登錄-注冊(cè)跳轉(zhuǎn)圖4.5.2個(gè)人中心-登錄-注冊(cè)頁面的跳轉(zhuǎn)caseR.id.mr_reg: Intentintent=newIntent(LoginActivity.this, RegisterActivity.class); startActivity(intent); break;4.5購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞4.5.1商城首頁的頁面切換4.5.2個(gè)人中心-登錄-注冊(cè)頁面的跳轉(zhuǎn)4.5.3登錄后跳轉(zhuǎn)個(gè)人中心4.5 購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞目錄(1)商城登錄后,可以用顯示Intent的startActivityForResult進(jìn)行Activity頁面跳轉(zhuǎn)并傳遞相關(guān)數(shù)據(jù),重寫LoginActivity類的onClick方法,添加如下代碼:4.5.3登錄后跳轉(zhuǎn)個(gè)人中心@OverridepublicvoidonClick(Viewview){user=et_user.getText().toString();pwd=et_pwd.getText().toString();switch(view.getId()){caseR.id.mr_login://登錄注冊(cè)文本框if("".equals(user)||user==null||"".equals(pwd)||pwd==null){ Toast.makeText(LoginActivity.this.getApplicationContext(), "登錄失敗,賬號(hào)或密碼不能為空", Toast.LENGTH_LONG).show();}else{ Toast.makeText(LoginActivity.this.getApplicationContext(), "登錄成功!賬號(hào)為"+user+",密碼為"+pwd, Toast.LENGTH_SHORT).show(); //登錄成功后跳轉(zhuǎn)至指定至主頁面 Intentintent=newIntent(LoginActivity.this,MainActivity.class); //傳遞數(shù)據(jù) intent.putExtra("user",user); intent.putExtra("pwd",pwd); startActivity(intent);}break;caseR.id.mr_reg: Intentintent=newIntent(LoginActivity.this,RegisterActivity.class); startActivity(intent); break;}}4.5購物商城界面的跳轉(zhuǎn)和數(shù)據(jù)傳遞(2)在MainActivity接收數(shù)據(jù)并展示。在onCreate方法里用getIntent()獲取傳遞意圖,并用getStringExtra方法獲取指定參數(shù)的對(duì)應(yīng)值。判斷用戶是否非空,非空默認(rèn)跳轉(zhuǎn)至個(gè)人中心,表示登錄成功。4.5.3登錄后跳轉(zhuǎn)個(gè)人中心@OverrideprotectedvoidonCreate(Bundlesave

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論