Android 台灣中文網

標題: Activity_B回傳給MainActivity [打印本頁]

作者: youandyw    時間: 2014-1-8 12:32
標題: Activity_B回傳給MainActivity
本帖最後由 youandyw 於 2014-1-8 12:36 編輯

我一直卡住我可以MainActivity傳到Activity_B但是要Activity_B回傳給MainActivity就出現問題

我參考了許多網站,但是我不明白要放在哪裡,是否有人能給個範例嗎?

另外請問如果要回傳的情況下必須要先讓MainActivity傳給Activity_B再要求Activity_B有回傳值才行嗎?

以下是我目前做到MainActivity傳到Activity_B

  1. //MainActivity.java

  2. Intent intent = new Intent(MainActivity.this, Activity_B.class);
  3. intent.putExtra("abc", tv1.getText().toString());
  4. intent.putExtra("123", 123);
  5. startActivity(intent);
複製代碼

  1. //Activity_B.java

  2. Bundle bundle = this.getIntent().getExtras();
  3. String s = bundle.getString("abc");
  4. int a =bundle.getInt("123");
  5. tv3.setText(s+","+Integer.toString(a));
複製代碼




作者: firemaples    時間: 2014-1-8 17:36
你是要
Main 呼叫 A 然後 A結束或Back後 Main會得到回傳值
或是
Main 呼叫 A 然後 A再去呼叫Main並傳值?
作者: firemaples    時間: 2014-1-9 13:35
本帖最後由 firemaples 於 2014-1-9 13:37 編輯

MainActivity: (呼叫Activity_B)
  1. final int fromActivity_B = 999; //用來辨別是從哪裡回傳回來的(定義成全域變數)
複製代碼
  1. Intent intent = new Intent(MainActivity.this, Activity_B.class);
  2. intent.putExtra("seq", targetSeq);
  3. startActivityForResult(intent, fromActivity_B); //使用startActivityForResult 並傳入 fromActivity_B
複製代碼


Activity_B: (Activity_B 完成時)
  1. Intent intent = new Intent();
  2. intent.putExtra("isSign", isSign);
  3. intent.putExtra("seq", seq);
  4. setResult(RESULT_OK, intent); //使用setResult + intent回傳值
  5. finish();//結束Activity_B
複製代碼


MainActivity (接收回傳值):
  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3.         if(resultCode == RESULT_OK){
  4.                 switch (resultCode) {
  5.                         case fromActivity_B: //呼叫Activity_B時帶上的判別用數值
  6.                                 Bundle extras = data.getExtras();
  7.                                 Boolean isSign = extras.getBoolean("isSign");
  8.                                 int seq = extras.getInt("seq");
  9.                         break;
  10.                 }
  11.         }
  12.         super.onActivityResult(requestCode, resultCode, data);
  13. }
複製代碼

作者: youandyw    時間: 2014-1-10 14:08
本帖最後由 youandyw 於 2014-1-10 16:26 編輯
firemaples 發表於 2014-1-9 13:35
MainActivity: (呼叫Activity_B)

我將final int fromActivity_B = 999放在以下的位置應該是沒錯吧(定義全域變數)


public class MainActivity extends Activity {
        final int fromActivity_B = 999; //用來辨別是從哪裡回傳回來的(定義成全域變數)

        TextView tv1;
        ...
        @Override
        protected void onCreate(Bundle savedInstanceState) {...




intent.putExtra("seq", targetSeq);  targetSeq這個是放什麼的?

還有MainActivity(接收回傳值)
  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3.         if(resultCode == RESULT_OK){
  4.                 switch (resultCode) {
  5.                         case fromActivity_B: //呼叫Activity_B時帶上的判別用數值
  6.                                 Bundle extras = data.getExtras();
  7.                                 Boolean isSign = extras.getBoolean("isSign");
  8.                                 int seq = extras.getInt("seq");
  9.                         break;
  10.                 }
  11.         }
  12.         super.onActivityResult(requestCode, resultCode, data);
  13. }
複製代碼


裡面的這三行我看不太懂是什麼意思


Bundle extras = data.getExtras();
Boolean isSign = extras.getBoolean("isSign");
int seq = extras.getInt("seq");




(這編輯器頗爛的...一直打給我資料亂跳)


作者: firemaples    時間: 2014-1-11 09:58
本帖最後由 firemaples 於 2014-1-11 10:01 編輯
intent.putExtra("seq", targetSeq);  targetSeq這個是放什麼的?


看你要放什麼, seq只是舉例

像你原來的程式 你就可以放

  1. intent.putExtra("abc", tv1.getText().toString());
  2. intent.putExtra("123", 123);
複製代碼

裡面的這三行我看不太懂是什麼意思


Bundle extras = data.getExtras();
Boolean isSign = extras.getBoolean("isSign");
int seq = extras.getInt("seq");


這是把把B回傳回來的東西取出來而已
那個data也是Intent型態 只是這個方法預設的物件名稱是data罷了



Main 把要傳遞給Activity_B的資料放置在一個Intent物件中(使用putExtra()放置資料)
Main 使用startActivityForResult() 呼叫並傳遞Intent物件給Activity_B

Activity_B被啟動後使用你原來的getIntent()方法取得Intent物件
並從中取出資料(使用getExtras()取回資料)

等到Activity_B執行結束想要返回資料給Main
一樣把要回傳給Main 的資料放置在另一個Intent物件中(使用putExtra()放置資料)
並使用setResult(RESULT_OK, intent)設定返回的狀態以及資料
再呼叫finish()結束Activity_B

Activity_B結束後返回Main
因為當初是用startActivityForResult()呼叫Activity_B
所以返回時會呼叫Main 的onActivityResult(int requestCode, int resultCode, Intent data)方法
其中requestCode是當初呼叫Activity_B時帶上的fromActivity_B參數
resultCode是返回的狀態,像這裡返回的是Activity_B這一行setResult(RESULT_OK, intent)設定的RESULT_OK
然後data就是Activity_B回傳回來的Intent物件
一樣可使用getExtras()取出資料





歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1