Android Activity 切換傳參數

Activity在參數間互傳應該也算是個相當常用上的功能
兩個Activity就像傳球一樣一個丟另一個接
由於我腦容量比較小還是來紀錄一下...以防忘記

現在狀況是ActivityA切換到ActivityB
然後丟一個參數過去

ActivityA找個要切換的地方寫上
Intent intent = new Intent();
intent.setClass(this, ActivityB.class);
Bundle bundle = new Bundle();
bundle.putInt("KEY_A", 1);
intent.putExtras(bundle);
startActivity(intent);


注意:
1. intent.setClass(this, ActivityB.class);,這中間的this如果不是直接寫在Avtivity下面那層會出現錯誤,只需要更正為
intent.setClass(ActivityA.this, ActivityB.class);

這個this在objectC中就像是self,但是又不大相同,常常會用上,但是要小心

2. bundle.putInt("KEY_A", 1);,bundle中可以依照需求增加更多參數,不限制Integer一種型態,就算是String、boolean、......各種型態都可以,自動補全按下去慢慢挑就好(如下圖)

裡面的("KEY_A", 1)就是常用的key/value,objectC中就是NSDictionary

ActivityB這端來接
Bundle bundle = this.getIntent().getExtras();
int key = bundle.getInt("KEY_A");
//System.out.println("key = "+key);


注意:
1. int key = bundle.getInt("KEY_A");這邊就依照key名稱去對應所得到的value,getInt也需要依照類型的不同更改為getString等的方式去更改型態,等號前面的型態也記得要與等號後方相同

--
前面的部份是單純傳過去,那如果Activity傳過去後在ActivityB執行過程中還需要切回ActivityA,或者兩邊可能要同步作一些動作就需要再加上一點東西

ActivityA原來上面那段稍作修正
Intent intent = new Intent();
intent.setClass(this, ActivityB.class);
Bundle bundle = new Bundle();
bundle.putInt("KEY_A", 1);
intent.putExtras(bundle);
//startActivity(intent); //修改這行
startActivityForResult(intent, 0);


ActivityA再內加上
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//TODO something
//System.out.println("requestCode = "+requestCode+" || resultCode = "+resultCode+" || data = "+data);
int keyB = data.getExtras().getInt("KEY_B");
//System.out.println("keyB = "+keyB);
}


其中data就是你所回傳的intent,從其中取出bundle所帶的值即可

ActivityB需要執行回傳的地方加上這段
Bundle bundle = new Bundle();
bundle.putInt("KEY_B", 1);
setResult(RESULT_OK, (new Intent()).putExtras(bundle));


由於跟上面一樣就不再多加敘述


當然還可以用更多的方式來傳參數,這只是其中的一個解決方案。

相關連結
Android Developers
Android Developers - Activity class

沒有留言:

張貼留言