Activity切換請求碼結果碼分析_第1頁
Activity切換請求碼結果碼分析_第2頁
Activity切換請求碼結果碼分析_第3頁
Activity切換請求碼結果碼分析_第4頁
Activity切換請求碼結果碼分析_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、如何為應用添加新的Activity:第一、在應用中創(chuàng)建一個繼承Activity的類(OneActivity) view sourceprint?1 public class OneActivity extends Activity . 2 public void onCreate(Bundle bundleState) 3 super.onCreate(bundleState); / 在這里使用 5 6 第二、每添加一個新的Activity都必須在應用清單上注冊,否則在程序運行時打開新窗口時出錯。具體方法:需要在功能清單AndroidManifest.xml文件中添加進上面Activity配置

2、 代碼(粗體部分):“.user.OneActivity“"></activity> 在應用主Activity中打開新建的OneActivity:(傳遞參數可選擇) 在一個Activity中可以使用系統提供的startActivity(Intent intent)方法打開新的Activity,在打開新的Activity前,你可以決定是否為新的Activity傳遞參數:第一種:打開新的Activity,不傳遞參數view sourceprint?1 public class MainActivity extends Activity . 2 protected voi

3、d onCreate(Bundle savedInstanceState) . 4 button.setOnClickListener(new View.OnClickListener() 5 /點擊該按鈕會打開一個新的Activity view sourceprint?1 public void onClick(View v) view sourceprint?1 /新建一個顯式意圖,第一個參數為當前Activity類對象,第二個參數為要打開的Activity類 2 startActivity(new Intent(MainActivity.this, OneActivity.class);

4、 3 4 ); view sourceprint?1 2 第二種:打開新的Activity,并傳遞若干個參數給它: view sourceprint?01 public class MainActivity extends Activity 02 protected void onCreate(Bundle savedInstanceState) 03 button.setOnClickListener(new View.OnClickListener() 04 /點擊該按鈕會打開一個新的Activity 05 public void onClick(View v) 06 Intent int

5、ent = new Intent(MainActivity.this, OneActivity.class) 07 Bundle bundle = new Bundle();/該類用作攜帶數據 08 bundle.putString("name", "xxxx");bundle.putInt("age", 4); 09 intent.putExtras(bundle);/附帶上額外的數據startActivity(intent); 10 11 ); 12 13 view sourceprint?1 /在新的Activity中接收前面A

6、ctivity傳遞過來的參數: 2 public class OneActivity extends Activity 3 protected void onCreate(Bundle savedInstanceState) . 4 Bundle bundle = this.getIntent().getExtras(); 5 String name = bundle.getString("name"); 6 int age = bundle.getInt("age"); 7 . 8 9 前面?zhèn)鬟f參數時使用到Bundle類和Intent類:他們作用和方法

7、Bundle類用作攜帶數據,它類似于Map,用于存放key-value名值對形式的值。相對于Map,它提供了各種常用類型的putXxx()/getXxx()方法, 如:putString()/getString()和putInt()/getInt(),putXxx()用于往Bundle對象放入數據,getXxx()方法用于從Bundle對象里獲取數據。 Bundle的內部實際上是使用了HashMap<string object>類型的變量來存放putXxx()方法放入的值 view sourceprint?01 public final class Bundle implement

8、s Parcelable, Cloneable . 02 Map<string object> mMap; public Bundle() 03 mMap = new HashMap<string object>(); . 04 05 public void putString(String key, String value) 06 mMap.put(key, value); 07 public String getString(String key) 08 Object o = mMap.get(key); return (String) o; . 09 /類型轉換

9、失敗后會返回null,這里省略了類型轉 換失敗后的處理代碼 10 11 在調用Bundle對象的getXxx()方法時,方法內部會從該變量中獲取數據,然后對數據進行類型轉換,轉換成什么類型由方法的Xxx決定, getXxx()方法會把轉換后的值返回。 Intent類應用"郵遞員"通過Intent可以激活Android應用的三大核心組件Activity,Service,BroadcastReceiver. 看看Intent傳遞參數的方法:第一種, . view sourceprint?1 /打開其他activity,intent意圖用于激活組件并可傳遞數據給新的activit

10、y 2 Intent intent=new Intent(MianActivity.this,OneActivity.class); 3 /要激活的OneActicity 4 intent.putExtra("key1",values); 5 intent.putExtra("key2",values); view sourceprint?1 startActivity(intent); view sourceprint?1 view sourceprint?1 / 在OneActivity中獲取傳遞的數據 . 2 Intent intent=this.

11、getIntent(); 3 /得到激活組件的意圖(MainActivity傳來的Intent內容,內容相同,但不是 同一個對象在OneActivity中已經執(zhí)行方法 4 setIntent(Intent newIntent)); 5 String key1=intent.getStringExtra("key1","ss"); 6 /參數二為缺省值,即沒有key1的values存在時則把ss賦給變量 7 String key2=intent.getStringExtra("key2","false"); . 第二

12、種:Intent intent = new Intent(); Bundle bundle = new Bundle();/該類用作攜帶數據bundle.putString("name", "dfddd"); intent.putExtras(bundle);/為意圖追加額外的數據,意圖原來已經具有的數據不會丟失,但key同名的數據會被替換 在被激活的Activity獲取數據方式除使用上面第一種外還可以先獲取Bundle對象在獲取該對象攜帶的數據 Intent intent=this.getIntent(); Bundel bundle=intent.g

13、etExtras(); String key1=bundle.getString("key1");. 第一種使用intent.putExtra()攜帶數據在于 Intent提供了各種常用類型重載后的putExtra()方法,如: putExtra(String name, String value)、 putExtra(String name, long value),在putExtra()方法內部會判斷當前Intent對象內部是否已經存在一個Bundle對象,如果不存在就會新建Bundle對象,以后調用 putExtra()方法傳入的值都會存放于該Bundle對象,下面是

14、Intent的putExtra(String name, String value)方法代碼片斷: view sourceprint?1 public class Intent implements Parcelable 2 private Bundle mExtras; 3 public Intent putExtra(String name, String value) 4 if (mExtras = null) mExtras = new Bundle(); 5 6 mExtras.putString(name, value); return this; 7 得到新打開Activity

15、關閉后返回的數據1、在MianActivity中得到新打開Activity 關閉后返回的數據,你需要使用系統提供的startActivityForResult(Intent intent, int requestCode)方法打開新的 Activity,新 Activity 關閉后會向前面的Activity 傳回數據,為了得到傳回的數據,你必須在前面的Activity中重寫 onActivityResult(int requestCode, int resultCode, Intent data)方法: public class MainActivity extends Activity pr

16、otected void onCreate(Bundle savedInstanceState) . button.setOnClickListener(new View.OnClickListener() /點擊該按鈕會打開一個新的Activity public void onClick(View v) /第二個參數為請求碼,可以根據業(yè)務需求自己編號 startActivityForResult (new Intent(MainActivity.this, NewActivity.class),1); );/第一個參數為請求Activity,即調用startActivityForResult

17、()傳遞過去的值(與前面的startActivity(Intent)一樣) /第二個參數為請求碼,請求碼的值是根據業(yè)務需要由自已設定,用于標識請求來源。 protected void onActivityResult(int requestCode, int resultCode, Intent data) String result = data.getExtras().getString(“result”); /得到新Activity 關閉后返回的數據 / 當新Activity關閉后,新Activity返回的數據通過 Intent進行傳遞,android平臺會調用前面Activity 的o

18、nActivityResult()方法,把存放了返回數據的Intent作為第三個輸入參數傳入,在onActivityResult()方法中 使用第三個輸入參數可以取出新Activity返回的數據。 2、使用startActivityForResult(Intent intent, int requestCode)方法打開新的Activity,新Activity關閉前需要向前面的Activity返回數據需要使用系統提供的 setResult(int resultCode, Intent data)方法實現:public class NewActivity extends Activity pro

19、tected void onCreate(Bundle savedInstanceState) . button.setOnClickListener(new View.OnClickListener() public void onClick(View v) Intent intent = new Intent();/數據是使用Intent返回 intent.putExtra(“result”, “sssssssssssss”); /把返回數據存入 /設置返回數據 ); setResult()方法的第一個參數值可以根據業(yè)務需要自己定義,上面代碼中使用到的RESULT_OK是系統Activit

20、y類定義的一個常量,值為-1,代碼片斷如下: public static final int RESULT_CANCELED = 0;public static final int RESULT_OK = -1;. 請求碼與結果碼的作用-方便分析傳遞數據的來源,請求者. 請求碼:使用startActivityForResult(Intent intent, int requestCode)方法打開新的Activity,我們需要為startActivityForResult()方法傳入 一個請求碼(第二個參 數)。請求碼的值是根據業(yè)務需要由自已設定,用于標識請求來源。 例如:一個Activity

21、有兩個按鈕,點擊這兩個按鈕都會打開同一個Activity,不管是那個按鈕打開新Activity,當這個新Activity關閉后,系統都會調用前面Activity的 onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那個按鈕打開的,并且要做出相 應的業(yè)務處理,這時可以這樣做: public void onCreate(Bundle savedInstanceState) . button1.setOnClickListener(new Vie

22、w.OnClickListener() public void onClick(View v) startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1); ); button2.setOnClickListener(new View.OnClickListener() public void onClick(View v) startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 2); ); protected

溫馨提示

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

評論

0/150

提交評論