搜尋

首頁  >  問答  >  主體

android - onActivityResult为什么不执行?

Activity A:

int tag  = 0;
startActivityForResult(new Intent(getApplication(), LoreAddActivity.class).putExtra("tag1", tag), 100);

@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
    super.onActivityResult(arg0, arg1, arg2);
    if(arg1==RESULT_OK){
        switch (arg0) {
        case 100:
            tag2 = arg2.getIntExtra("tag2", 0);
            break;
        default:
            break;
        }
    }
}

Activity B:

int tag = getIntent().getIntExtra("tag1",0);

Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putInt("tag2", tag);
intent.putExtras(bundle);
setResult(RESULT_OK, intent);
finish();
天蓬老师天蓬老师2772 天前508

全部回覆(4)我來回復

  • 天蓬老师

    天蓬老师2017-04-17 17:31:24

    有可能是intent 裡面出錯了。 嘗試下new Intent(XXX.this,LoreAddActivity.class);

    getApplication() though its referring to Application object but the
    Application class extends Context class, so it can be used to offer
    application context.

    getApplication回傳的application物件也繼承了context,所以你可以這樣用。但如果沒有明確指定來源,那麼當接收回呼即setResult的時候,B 是不知道這個intent來自哪裡的。以上是我的理解,僅供參考,如有錯誤請指出

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:31:24

    只要是回到Activity A,onActivityResult就會執行。你可以用Log或debug確認一下onActivityResult中哪裡沒有執行

    回覆
    0
  • PHPz

    PHPz2017-04-17 17:31:24

    兩個activity 的啟動模式你設定的是什麼

    回覆
    0
  • 黄舟

    黄舟2017-04-17 17:31:24

    startActivityForResult(new Intent(getApplication(), LoreAddActivity.class).putExtra("tag1", tag), 100);

    這句話使用的是getApplication,Activity 的啟動預設使用standard 模式,使用這種模式啟動的Activity 會預設進入啟動它的Activity 的任務堆疊中,而getApplication 方法獲得的Context 並不包含任務資訊棧。所以啟動 Activity 的時候最好不要使用 getApplication,換成 Activity 的 Context 吧。

    回覆
    0
  • 取消回覆