亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android Activity之間相互調(diào)用與傳遞參數(shù)的原理與用法分析

 更新時(shí)間:2016年08月19日 09:17:54   作者:與時(shí)俱進(jìn)  
這篇文章主要介紹了Android Activity之間相互調(diào)用與傳遞參數(shù)的原理與用法,較為詳細(xì)的分析了Android組件的構(gòu)成以及Activity的創(chuàng)建、調(diào)用、切換等相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Android Activity之間的相互調(diào)用與傳遞參數(shù)。分享給大家供大家參考,具體如下:

Activity之間是如何調(diào)用的

在javaWeb程序中,jsp與jsp之間的調(diào)用是通過重定向完成的,而在Android中,Activity與Activity之間的切換是通過Intent來(lái)完成的。

所謂Intent,它是Android中非常重要的內(nèi)置組件,他可以理解為“我要干一件什么事情”。在Android中有3大組件:Activity,Service、Broadcast,他們之間的通信都是通過Intent來(lái)完成的,所以Intent其實(shí)就是告訴他們之間的每一個(gè)人,要干什么事情。

創(chuàng)建自己的Activity

高煥堂先生的Android講義中有如下一段內(nèi)容:

Android的4種嫡系組件(即Activity、Service、IntentReceiver和ContentProvider)之間如何互相溝通呢?這4種嫡系組件都是由Android啟動(dòng)的,并不是組件之間透過直接呼叫而啟動(dòng)的。

這段文字總結(jié)的十分精辟,它告訴了讀者(以Activity為例)Activity是Android自啟動(dòng)的,這樣的話,編程人員必須要明確告訴Android“我的應(yīng)用程序里面有哪些是你要給我啟動(dòng)的”,而如何告訴Android這些信息呢,Android為我們提供了一個(gè)AndroidManifest.xml文件。在這個(gè)文件中,就可以告訴Android這些內(nèi)容。這也是為什么我們?cè)诮⒘俗约旱腁ctivity、ContentProvider等之后,必須要在配置文件中進(jìn)行配置的原因。

以下代碼是在自己定義的一個(gè)名為SecondActivity的Activity,其配置代碼如下:

<activity android:name=".SecondActivity"
     android:label="secondActivity">
</activity>

在android:name一項(xiàng)中中的“.”代表在當(dāng)前配置文件的默認(rèn)包名之下。

Activity之間的切換

從一個(gè)Activity調(diào)用另一個(gè)Activity,十分簡(jiǎn)單,只需要?jiǎng)?chuàng)建一個(gè)Intent,并且告訴Intent我從哪來(lái),要到哪去,然后執(zhí)行這個(gè)Intent,就可以了。示例代碼如下:

Intent i = new Intent(TestActivity.this,SecondActivity.class);
startActivity(i);

當(dāng)然,這樣只能夠做到Activity之間的切換,如果想在切換的同時(shí),由舊的Activity向新的Activity傳遞一些參數(shù),那么就要在startActivity()方法之前,為Intent添加參數(shù),通過putExtra(string,xxx)這組方法,就可實(shí)現(xiàn)。

putExtra(string,xxx)方法類似于map,鍵都是String型,值有不公類型,該方法被重載,具體可參考API,示例代碼如下:

Intent i = new Intent(TestActivity.this,SecondActivity.class);
i.putExtra("uName", "legend");
i.putExtra("uAge", (short)18);
startActivity (i);

獲取Intent傳遞的值

舊的Activity將值傳遞給了新的Activity,那么在新的Activity中,要通過getIntent()方法,方可接收傳遞過來(lái)的Intent。得到Intent后通過getxxxExtra()方法,可以取得不同類型的值。如下所示:

Intent i = getIntent();
String uName = i.getStringExtra("uName");
short uAge = i.getShortExtra("uAge", (short) 0);

舊Activity得到新Activity結(jié)束后傳遞的Intent

在開發(fā)中,有這種情況,比如說我們的一個(gè)Activity要調(diào)用一個(gè)新的Activity,讓后用戶對(duì)新的Activity操作完成后,關(guān)閉新的Activity,這時(shí)需要將新的Activity中的一些值傳遞給舊的Activity。這就中情況不用自己處理,Android已經(jīng)為我們編寫了一個(gè)onActivityResult(int requestCode, int resultCode, Intent data)方法,專門處理這種情況。

首先,在舊的Acitvity中的啟動(dòng)Intent方法不能再使用之前的startActivity,而要給用startActivityForResult(i, REQUESTCODE1 );方法,該方法第一個(gè)參數(shù)為要傳遞的intent,第二個(gè)參數(shù)為請(qǐng)求碼,該請(qǐng)求碼其實(shí)就是一個(gè)整型變量,用于指明是那個(gè)方法、或者說是那個(gè)控件啟動(dòng)了該intent,其最主要的目的是在onActivityResult(int requestCode, int resultCode, Intent data)方法中,編程使用。讀者這里可以不用深究,看到例子后,便會(huì)明白。該處代碼如下:

Intent i = new Intent(TestActivity.this,SecondActivity.class);
i.putExtra("uName", "legend");
i.putExtra("uAge", (short)18);
startActivityForResult(i, REQUESTCODE1 );

其次,在新的Activity中要接受剛剛傳遞的Intent,接受方法如上所述,這里不再贅述。在新的Acitvity處理完成后,需要同過setResult(Intent i)方法來(lái)設(shè)置新的Activity結(jié)束后需要傳遞會(huì)舊的Activity的Intent。之后調(diào)用新的Activity的finish()方法,結(jié)束新的Acitvity就可以了。代碼如下:

Intent resultIntent = new Intent();
resultIntent.putExtra("uName", "legend2");
resultIntent.putExtra("uAge", (short)22);
setResult(RESULTCODE1, resultIntent);
SecondActivity.this.finish();

最后,在舊的Activity中重寫onActivityResult(int requestCode, int resultCode, Intent data)方法,該方法的三個(gè)參數(shù),這里就不在贅述了,相信讀者一看即明白,這里給出代碼如下:

if(requestCode == REQUESTCODE1){
     System.out.println("REQUESTCODE equal");
     if(resultCode == SecondActivity.RESULTCODE1){
         System.out.println("RESULTCODE equal");
         String uName = data.getStringExtra("uName");
         short uAge = data.getShortExtra("uAge", (short)0);
         tv.setText("uName:"+uName+" uAge:"+uAge);
     }
}

參考程序

ActivityTest

補(bǔ)充:

在Intent中,可以攜帶Object類型的信息,讀者查閱API后,可能會(huì)放先,putExtra()方法中,并沒有實(shí)現(xiàn)object的,但是重載了如下的方法:putExtra(String name, Serializable value),只要將對(duì)象實(shí)現(xiàn)了Serializable接口,就可以添加進(jìn)Intent了。

對(duì)象序列化及反序列化

一個(gè)對(duì)象產(chǎn)生后,實(shí)際上是在內(nèi)存中開辟了一個(gè)存儲(chǔ)空間,方便存儲(chǔ)信息。

對(duì)象的序列化,就是一個(gè)對(duì)象變成二進(jìn)制數(shù)據(jù)流的一種方法,通過對(duì)象的序列化可以方便的實(shí)現(xiàn)對(duì)象的傳輸與存儲(chǔ)。

如果一個(gè)類的對(duì)象想要被序列化,必須實(shí)現(xiàn)Serializable接口,但是該接口中無(wú)方法,它屬于一個(gè)標(biāo)示接口,表示具備了某種能力。

序列化和反序列化,可以理解為:

序列化:程序àObjectOutputStreamà序列化對(duì)象
反序列化:序列化對(duì)象àObjectInputStreamà程序

在序列化的時(shí)候,可以通過serialVersionUID來(lái)標(biāo)識(shí)序列化版本。

值得注意的是,序列化存儲(chǔ)的只是對(duì)象的成員變量。

ObjectInputStream中的readObject()方法可讀取對(duì)象。
ObjectOutputStream中的writeObject()方法可寫入對(duì)象。

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android視圖View技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫(kù)技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android數(shù)據(jù)庫(kù)操作技巧總結(jié)》、《Android文件操作技巧匯總》、《Android編程開發(fā)之SD卡操作方法匯總》、《Android開發(fā)入門與進(jìn)階教程》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Android Studio報(bào):“Attribute application@theme or @ icon ”問題的解決

    Android Studio報(bào):“Attribute application@theme or @ icon ”問題的解

    這篇文章主要給大家介紹了關(guān)于Android Studio報(bào):“Attribute application@theme or @ icon ”問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • 關(guān)于android studio通過命令行運(yùn)行g(shù)radle編譯命令的問題

    關(guān)于android studio通過命令行運(yùn)行g(shù)radle編譯命令的問題

    這篇文章主要介紹了關(guān)于android studio通過命令行運(yùn)行g(shù)radle編譯命令的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • Android編程實(shí)現(xiàn)的EditText彈出打開和關(guān)閉工具類

    Android編程實(shí)現(xiàn)的EditText彈出打開和關(guān)閉工具類

    這篇文章主要介紹了Android編程實(shí)現(xiàn)的EditText彈出打開和關(guān)閉工具類,涉及Android輸入框EditText彈出打開和關(guān)閉功能簡(jiǎn)單實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-02-02
  • Android仿UC瀏覽器左右上下滾動(dòng)功能

    Android仿UC瀏覽器左右上下滾動(dòng)功能

    這篇文章主要介紹了Android仿UC瀏覽器左右上下滾動(dòng)功能,左右滑動(dòng)顯示菜單,上下滑動(dòng)滾動(dòng)內(nèi)容,需要的朋友可以參考下
    2015-12-12
  • Android中Intent傳遞對(duì)象的3種方式詳解

    Android中Intent傳遞對(duì)象的3種方式詳解

    這篇文章給大家介紹了Android中Intent傳遞對(duì)象的3種方式,分別是Serializable 方式、Parcelable 方式以及JSON 方式,有需要的朋友們可以一起參考借鑒,下面來(lái)一起看看吧。
    2016-09-09
  • Android基于開源項(xiàng)目xutils3實(shí)現(xiàn)下載

    Android基于開源項(xiàng)目xutils3實(shí)現(xiàn)下載

    這篇文章主要介紹了Android基于開源項(xiàng)目xutils3實(shí)現(xiàn)下載,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Android自定義View實(shí)現(xiàn)圓形進(jìn)度條

    Android自定義View實(shí)現(xiàn)圓形進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)圓形進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Android 開機(jī)自啟動(dòng)Service實(shí)現(xiàn)詳解

    Android 開機(jī)自啟動(dòng)Service實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了Android 開機(jī)自啟動(dòng)Service實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • AsyncTask官方文檔教程整理

    AsyncTask官方文檔教程整理

    這篇文章主要跟大家分享了關(guān)于AsyncTask官方文檔的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-04-04
  • Android7.0自動(dòng)更新適配 包解析異常

    Android7.0自動(dòng)更新適配 包解析異常

    這篇文章主要為大家詳細(xì)介紹了Android7.0自動(dòng)更新適配,包解析異常的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評(píng)論