初識Activity

1.在一個Activity中使用多個View

如果把Activity看作MVC中的Control?它負責管理UI和接受事件(包括用戶的輸入),雖然說一個Activity通常對應一個屏幕,但事實上,我們是可以只用一個Activity管理多個不同的View來實現簡單的邏輯。
首先,我們增加一個新的資源描述layout/second.xml。

除了一個“Hello中國”以外,增加一個按鈕可以返回前一個界面。然後,在代碼中我們要爲helloTwo增加兩個方法,setViewOneCommand和setViewTwoCommand,分別處理一下在不同界面時,從資源里加載組件併爲組件綁定一個事件處理器。

 

最後,我們需要在onCreate的時候,也就是啓動後的main界面上設置一下按鈕事件處理器。新的onCreate方法如下:
   

 

編譯,運行,OK。

2.還是回到正道上,多個Activity之間的跳轉

Android中提供一個叫Intent的類來實現屏幕之間的跳轉,按文檔的說法,似乎他們也建議採用這種方法,Intent的用法比較複雜,現在我先看看它最簡單的用法。
先在應用中增加兩個Activity,這需要修改AndroidManifest.xml文件了,如下:

 

很簡單,就是加一個<Activity>標籤而已,新標籤的class是.HelloThreeB,顯示的應用標題與前一個Activity一樣而已,然後第二步就是修改一個HelloThree類的實現,在onCreate方法中綁定按鈕的事件處理器:
 

 

這裏的跳轉功能用Intent來操作,它的最簡單用法就是用函數setClass()設置跳轉前後兩個Activity類的實例,然後調用Activity自己的startActivity(intent)即可。最後一句finish()表示將當前Activity關掉(如果不關掉會如何?你可以自己試一下看效果,事實上有時我們是不需要關掉當前Activity的)。
然後,我們同樣弄一個Activity類HelloThreeB,代碼與前面的差不多,只是將setClass的兩個參數反一下,這樣就可以簡單地實現在兩個Activity界面中來回切換的功能了。

3.如果我想在兩個Activity之間進行數據交換,怎麼辦?

前例中的startActivity()只有一個參數,如果需要向新打開的Activity傳遞參數,我們得換一個函數了, Android提供了startSubActivity(Intent,int)這個函數來實現這個功能。
函數原型爲: public void startSubActivity(Intent intent, int requestCode)
這裏的requestCode用來標識某一個調用,一般由我們定義一個常量。

如何把參數傳過去呢?Intent類在提供setClass()函數的同時也提供了一個setData()函數。
函數原型爲:public Intent setData(ContentURI data)
參數類型是ContentURI,它的詳細內容下回再分析,現在就把它當成一個String類型來用吧。
參數帶到新的Activity後,同樣用Activity.getIntent()函數可以得到當前過來的Intent對象,然後用getData()就取到參數了。

把參數帶回來的方法是Activity.setResult(),它有幾個形式,現在先看最簡單的一個吧。
函數原型是:public final void setResult(int resultCode, String data)
resultCode是返回代碼,同樣用來標識一個返回類型,而data則是它要返回的參數。

在原來的Activity中的事件處理回調函數onActivityResult,會被系統調用,從它的參數裏可以得到返回值。
函數原型爲:protected void onActivityResult(int requestCode, int resultCode,String data, Bundle extras)
這裏的requestCode就是前面啓動新Activity時的帶過去的requestCode,而resultCode則關聯上了setResult中的resultCode,data是參數,extras也是一個很重要的東西,後面再研究一下它的作用。

下面,我們來看一下代碼吧,先看看HelloThree中的代碼:

這裏的REQUEST_TYPE_A是我們定義的一個常量。在onActivityResult中用它與RESULT_OK一起作爲條件判斷如何處理返回值,這裏只是簡單將TextView顯示值換成傳來的字串。
再來看看另一個HelloThreeB類的實現代碼:
   

在按鈕處理事件中,從Intent取出參數,處理一下再用setResult返回給前一個Activity即可。

編譯運行即可。


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/sharetop/archive/2007/12/14/1936478.aspx

發佈了300 篇原創文章 · 獲贊 19 · 訪問量 143萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章