多個Activity之間傳值,使用Intent
Activity之間傳值有很多種,當然看寫程式碼的人比較趨向於哪一種了,無論用那種方式實現的目的只有一個:多個Activity之間實現通訊!下面這篇部落格介紹一下多個Activity之間使用Intent傳值,Intent揹負著信使的榮譽稱號,當然它就要履行這個榮譽稱號的義務了,使用Intent傳值有些注意事項,各位在使用的需要注意下。
A-B之間資料傳遞
1)單向傳值:A傳值給B,但不需要B返回資料
A:
//傳入資料給B
Intent i = new Intent(A.this,B.class);
i.putExtra("A_B","給B的資料");
startActivity(i);
B:
//拿到A傳入的資料
String date= getIntent().getStringExtra("A_B");
2)雙向傳值:A傳值給B,並且需要B返回資料給A
A:
//傳入資料給B
Intent i = new Intent(A.this,B.class);
i.putExtra("A_B","給B的資料");
startActivityForResult(i, 0x123);
//接收B返回的資料,重寫onActivityResult方法
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//判斷返回的code是否是B頁面的code
if(resultCode==0x123){
//拿到B傳回的資料
String date = intent.getStringExtra("B_A");
}
}
B:
//接收A傳入的資料
String date= getIntent().getStringExtra("A_B");
//返回資料給A,在末尾一定要將當前頁面finish
Intent intent = new Intent();
intent.putExtra("B_A","返回給A的資料");
setResult(0x123,intent);
onBackPressed();
B-C,A-C之間的資料單向或者雙向傳遞都跟A-B之間資料傳遞的方法一樣,這裡就不重複寫了,有興趣的同學可以把程式碼寫一遍跑一下,下面說說C跳過B直接傳遞值給A怎麼做。
A->B->C,C->A
在實際應用開發中有很多情況是A->B->C,然後在C中做了某些操作,需要把一些值直接跳過B直接傳遞給A,其實這種傳值方式同樣有很多種,比如發個特定的廣播,迴圈退出已經存在的頁面等等,其實方法有很多種,下面我還是以Intent傳值為例
C:
Intent i = new Intent(C.this, A.class);
i.putExtra("C_A", "C傳回給A的資料");
//要啟動的activity已經在當前的任務中,那麼在該activity之上的activity都會關閉,並且intent會傳遞給在棧頂的activity
//如果 Activity 已經是執行在 Task 的 top,則該 Activity 將不會再被啟動
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
A:
此時需要在A中重寫onNewIntent方法,在該方法中獲取從C中傳遞的值
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//從C返回的資料
String date = intent.getStringExtra("C_A");
}
至於對Activity跳轉中Flag理解下次有時間再做分享,以上就是今天總結的內容,這些都是常用的知識,除此之外還有很多等著我們去探索,繼續努力!