綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] Activity_B回傳給MainActivity

[複製連結] 查看: 1936|回覆: 6|好評: 0
回帖獎勵 4 個碎鑽      回覆本帖可獲得 1 個碎鑽獎勵! 每人限 1 次
跳轉到指定樓層
樓主
youandyw | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2014-1-8 12:32

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
本帖最後由 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));
複製代碼



「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
firemaples | 收聽TA | 只看該作者
發表於 2014-1-8 17:36

回帖獎勵 +1 個碎鑽

你是要
Main 呼叫 A 然後 A結束或Back後 Main會得到回傳值
或是
Main 呼叫 A 然後 A再去呼叫Main並傳值?

點評

所以是 "Main 呼叫 A 然後 A結束或Back後 Main會得到回傳值"  發表於 2014-1-8 22:01
Main去開啟 Activity_B 等Activity_B裡面的TextView3值得出來後,當我返回Main,Main上的TextView1就會顯示剛剛Activity_B上的TextView3  發表於 2014-1-8 22:00
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
firemaples | 收聽TA | 只看該作者
發表於 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. }
複製代碼
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
 樓主| youandyw | 收聽TA | 只看該作者
發表於 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");




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

用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
firemaples | 收聽TA | 只看該作者
發表於 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 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則