2012-04-19 154 views
2

執行我有兩個活動,我們姑且稱之爲A和B.呼叫完成()不停止的代碼

A是可以從應用程序兩個地啓動一項活動。我希望能夠知道是否是從地方1或2開始,所以在BI所說的這樣的:

Intent i = new Intent(B.this, A.class); 
i.putExtra("code", code); 
startActivityForResult(i, code); 

code是一個值爲1的int)

在OnCreate AI的方法做到這一點:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    Intent i = getIntent(); 
    Bundle extras = i.getExtras(); 
    if(extras != null) 
    { 
     int code = extras.getInt("code"); 
     if(code == 1) 
     { 
      ClearReleasesCache(); // just a private method of A 
      setResult(1, i);     
      finish(); 
      return; 
     } 
    } 

    // do everything else as usual 
    setContentView... 
} 

現在,問題是這樣的(我在調試注意到了這一點):

當我推出一個由B,我想給完成,如代碼所示。當我從另一個不是B的活動啓動A時,我希望它像往常一樣運行(並且它)。但是finish()return在這裏什麼都不做 - 我可以看到在調用返回調用之後,它跳回到onCreate,它不關閉活動。

也就是說,B中的onActivityResult()永遠不會被調用。

這裏有什麼問題?

+0

@sandy在他的回答中的說法很有道理。也許你應該將檢查移動到onStart()方法? – 2012-04-19 13:27:18

+0

「return」不可能「在這裏什麼也不做」。 – CommonsWare 2012-04-19 13:39:43

回答

0
if(extras == null || extras.getInt("code") != 1) { 
     // do everything else as usual 
} else 
     finish(); 

不能你只是切換if條件?

編輯:但你確定返回語句不工作嗎?

+0

我做到了這一點,並以某種方式工作。乾杯。 – eightx2 2012-04-21 18:59:49

0

您還可以在finish()後添加return,statement。

1

怎麼能創造..它被一次完成當前執行完畢前完成..不是所有的在中間的東西突然......這是有道理的太..

0

嘗試設置此setResult(RESULT_OK, i);,我有一個類似的問題,當我通過一個resultCode不同於RESULT_OK,並在這種情況下onActivityResult()從未被稱爲

0

你看起來正確 - 你檢查你的父Activity看看它是否可能重新啓動無額外活動?

您也可以稍微調整邏輯修復:

Intent i = getIntent(); 
Bundle extras = i.getExtras(); 
if(extras != null && extras.getInt("code") == 1) { 
    ClearReleasesCache(); // just a private method of A 
    setResult(1, i);     
    finish(); 
    return; 
} else { 

    // do everything else as usual 
    setContentView... 
} 

但是,如果從父你的邏輯(呼叫)Actvity是incorrent你將很可能得到相同的結果。