Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android學習之路——Android四大組件之activity(二)

Android學習之路——Android四大組件之activity(二)

編輯:關於Android編程

上一篇講了activity的創建和啟動,這一篇,我們來講講activity的數據傳遞

activity之間的數據傳遞,這裡主要介紹的是activity之間簡單數據的傳遞,直接用bundle傳遞基本數據類型的數據。還有一種數據類型是parcelable和serialable

用bundle 傳遞數據有兩種情況,這篇文章就分別從兩個方面說明一下。

一、利用bundle傳遞基本數據類型

1、啟動時傳遞數據,使用intent的put方法,將數據寫入bundle中,然後startActivity(intent)就可以將數據到底到目標activity中去

AActivity中傳遞數據:

Intent intent = new Intent(AActivity.this, BActivity.class);
intent.putExtra("name", "android");
intent.putExtra("age", 20);
intent.putExtra("isStudent", true);
startActivity(intent);
BActivity中接收數據: 目標activity中通過getIntent()方法獲取Intent 對象,然後就可以通過getString getInt getBoolean等方法獲取到傳遞過來的基本數據類型的數據

String name = getIntent().getStringExtra("name");
int age = getIntent().getIntExtra("age", 0);
Boolean isStudent = getIntent().getBooleanExtra("isStudent", false);

運行結果:

\


\

2、關閉時返回數據

AActivity中啟動activity<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">Intent intent = new Intent(AActivity.this, BActivity.class); startActivityForResult(intent, 1);BActivity中關閉activity並返回數據到AActivity

B中要做的工作有將要返回的數據放入intent中,然後設置返回結果碼setResult(resultCode)一般結果碼都是Activity.RESULT_OK,然後調用finish方法,關閉activity,返回到之前的activity

Intent intent = new Intent();
intent.putExtra("name", "這是bactivity關閉傳遞的數據");
setResult(Activity.RESULT_OK,intent);
finish();

接下來要在啟動前的activity中接收返回的數據,重寫ActivityResult方法即可,第三個參數就是帶數據的intent

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		if (resultCode == Activity.RESULT_OK) {
			switch (requestCode) {
			case 100:
				resultTxt.setText(data.getStringExtra("result"));
				break;
			default:
				break;
			}
		}
		
	}

二、利用parcelabel和serializable傳遞復雜數據類型

1、parcelable傳遞數據

如果要傳遞自定義的數據類型,那麼將自定義數據類型實現parcelbale接口即可。傳遞方法如下:

Person p = new Person("趙六", 24);
intent.putExtra("p", p); // 把Person當作Parcelable傳遞
		
startActivity(intent);		

在BActivity中取出數據:

Person p = intent.getParcelableExtra("p");
otherTV.setText(p.toString());


2、serializable傳遞數據

如果要傳遞自定義的數據類型,那麼將自定義數據類型實現serializable接口即可。傳遞方法如下:在要傳遞的對象類中實現兩個方法describeContents writeToParcel

@Override
	public int describeContents() {
		return 0;
	}

	@Override
	public void writeToParcel(Parcel dest, int flags) {		// 怎麼把Person寫到Parcel
		dest.writeString(name);								// 把成員變量寫進去
		dest.writeInt(age);
	}
	
	public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
		public Person createFromParcel(Parcel source) {					// 怎麼從Parcel還原Person
			return new Person(source.readString(), source.readInt());	// 從Parcel中讀取數據, 創建Person
		}
		public Person[] newArray(int size) {	// 怎麼獲取數組
			return new Person[size];
		}
	};
	
	// 綁定服務的時候, 傳遞參數時, 只能用Parcelable



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved