1. 程式人生 > >多個Activity之間傳值,使用Intent

多個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理解下次有時間再做分享,以上就是今天總結的內容,這些都是常用的知識,除此之外還有很多等著我們去探索,繼續努力!