乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Activity之間的相互調(diào)用與傳遞參數(shù)

       幻魂1990 2013-09-14
      Activity之間是如何調(diào)用的
      在javaWeb程序中,jsp與jsp之間的調(diào)用是通過(guò)重定向完成的,而在Android中,Activity與Activity之間的切換是通過(guò)Intent來(lái)完成的。
      所謂Intent,它是Android中非常重要的內(nèi)置組件,他可以理解為“我要干一件什么事情”。在Android中有3大組件:Activity,Service、Broadcast,他們之間的通信都是通過(guò)Intent來(lái)完成的,所以Intent其實(shí)就是告訴他們之間的每一個(gè)人,要干什么事情。

      創(chuàng)建自己的Activity
      高煥堂先生的Android講義中有如下一段內(nèi)容:
      Android的4種嫡系組件(即Activity、Service、IntentReceiver和ContentProvider)之間如何互相溝通呢?這4種嫡系組件都是由Android啟動(dòng)的,并不是組件之間透過(guò)直接呼叫而啟動(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,其配置代碼如下:

      Java代碼
      1. <activity android:name=".SecondActivity"
      2.          android:label="secondActivity">
      3. </activity>
      復(fù)制代碼


      在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ù),通過(guò)putExtra(string,xxx)這組方法,就可實(shí)現(xiàn)。
      putExtra(string,xxx)方法類似于map,鍵都是String型,值有不公類型,該方法被重載,具體可參考API,示例代碼如下:

      Java代碼
      1.                                      Intent i = new Intent(TestActivity.this,SecondActivity.class);
      2.                                      i.putExtra("uName", "legend");
      3.                                      i.putExtra("uAge", (short)18);
      4.                                      startActivity (i);
      復(fù)制代碼


      獲取Intent傳遞的值
      舊的Activity將值傳遞給了新的Activity,那么在新的Activity中,要通過(guò)getIntent()方法,方可接收傳遞過(guò)來(lái)的Intent。得到Intent后通過(guò)getxxxExtra()方法,可以取得不同類型的值。如下所示:
      1.               <span style="white-space: normal;"><span lang="EN-US"><span style=""> </span></span></span><span style="white-space: normal;"><span style="white-space: pre;">  Intent i = getIntent();</span></span>
      復(fù)制代碼

      Java代碼
      1.      String uName = i.getStringExtra("uName");
      2.                    short uAge = i.getShortExtra("uAge", (short) 0);
      復(fù)制代碼


      舊Activity得到新Activity結(jié)束后傳遞的Intent
      在開(kāi)發(fā)中,有這種情況,比如說(shuō)我們的一個(gè)Activity要調(diào)用一個(gè)新的Activity,讓后用戶對(duì)新的Activity操作完成后,關(guān)閉新的Activity,這時(shí)需要將新的Activity中的一些值傳遞給舊的Activity。這就中情況不用自己處理,Android已經(jīng)為我們編寫(xiě)了一個(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è)方法、或者說(shuō)是那個(gè)控件啟動(dòng)了該intent,其最主要的目的是在onActivityResult(int requestCode, int resultCode, Intent data)方法中,編程使用。讀者這里可以不用深究,看到例子后,便會(huì)明白。該處代碼如下:
      Java代碼
      1. Intent i = new Intent(TestActivity.this,SecondActivity.class);     
      復(fù)制代碼


      Java代碼
      1. i.putExtra("uName", "legend");
      2.      i.putExtra("uAge", (short)18);
      3.      startActivityForResult(i, REQUESTCODE1 );
      復(fù)制代碼
      其次,在新的Activity中要接受剛剛傳遞的Intent,接受方法如上所述,這里不再贅述。在新的Acitvity處理完成后,需要同過(guò)setResult(Intent i)方法來(lái)設(shè)置新的Activity結(jié)束后需要傳遞會(huì)舊的Activity的Intent。之后調(diào)用新的Activity的finish()方法,結(jié)束新的Acitvity就可以了。代碼如下:


      Java代碼
      1.                                      Intent resultIntent = new Intent();
      2.                                      resultIntent.putExtra("uName", "legend2");
      3.                                      resultIntent.putExtra("uAge", (short)22);
      4.                                      setResult(RESULTCODE1, resultIntent);
      5.                                      SecondActivity.this.finish();
      復(fù)制代碼


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

      Java代碼
      1.                    if(requestCode == REQUESTCODE1){
      2.                             System.out.println("REQUESTCODE equal");
      3.                             if(resultCode == SecondActivity.RESULTCODE1){
      4.                                      System.out.println("RESULTCODE equal");
      5.                                      String uName = data.getStringExtra("uName");
      6.                                      short uAge = data.getShortExtra("uAge", (short)0);
      7.                                      tv.setText("uName:"+uName+" uAge:"+uAge);
      8.                             }
      9.                    }
      復(fù)制代碼


      參考程序
      ActivityTest
      補(bǔ)充:
      在Intent中,可以攜帶Object類型的信息,讀者查閱API后,可能會(huì)放先,putExtra()方法中,并沒(méi)有實(shí)現(xiàn)object的,但是重載了如下的方法:[url=]putExtra[/url]([url=]String[/url] name, [url=]Serializable[/url] value),只要將對(duì)象實(shí)現(xiàn)了Serializable接口,就可以添加進(jìn)Intent了。
      對(duì)象序列化及反序列化
      一個(gè)對(duì)象產(chǎn)生后,實(shí)際上是在內(nèi)存中開(kāi)辟了一個(gè)存儲(chǔ)空間,方便存儲(chǔ)信息。
      對(duì)象的序列化,就是一個(gè)對(duì)象變成二進(jìn)制數(shù)據(jù)流的一種方法,通過(guò)對(duì)象的序列化可以方便的實(shí)現(xiàn)對(duì)象的傳輸與存儲(chǔ)。
      如果一個(gè)類的對(duì)象想要被序列化,必須實(shí)現(xiàn)Serializable接口,但是該接口中無(wú)方法,它屬于一個(gè)標(biāo)示接口,表示具備了某種能力。
      序列化和反序列化,可以理解為:
      序列化:程序?ObjectOutputStream?序列化對(duì)象
      反序列化:序列化對(duì)象?ObjectInputStream?程序
      在序列化的時(shí)候,可以通過(guò)serialVersionUID來(lái)標(biāo)識(shí)序列化版本。
      值得注意的是,序列化存儲(chǔ)的只是對(duì)象的成員變量。
      ObjectInputStream中的readObject()方法可讀取對(duì)象。
      ObjectOutputStream中的writeObject()方法可寫(xiě)入對(duì)象。

      transient關(guān)鍵字
      在序列化時(shí),可以指定那個(gè)成員變量不被序列化,只要在成員變量之前添加transient關(guān)鍵字即可。
      參考代碼
      這部分內(nèi)容可參考代碼:DserPerson,SerPerson,Person。
      在Android中實(shí)現(xiàn),可參考代碼ActivityTest2

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多