我有一個主活動中,可以揭開序幕子活動B,C或D.我開始使用他們startActivityForResult(newIntent,REQUEST_CODE);的Android finishActivity總是導致onActivityResult得到RESULT_CANCELED
用戶可以選擇B,C之間進行導航,以及d當一個被顯示。活動A控制導航。當他們選擇屏幕'A'之間的交換時,首先調用finishActivity(REQUEST_CODE);在顯示的那個上,然後調用startActivityForResult(newIntent,REQUEST_CODE);爲下一個。
在我onActivityResult我有
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
// these logs are just for my debugging
Log.w(this.toString(), "onActivityResult returned to by " + requestCode);
Log.w(this.toString(), "result code = " + resultCode);
// the Activity set this value if it was returning normally
if (RESULT_OK == resultCode)
{
Log.i(this.toString(), "---- the sub-activity returned OK ----");
// do some stuff
}// end if (RESULT_OK == resultCode)
// Else we got here because the user hit the back button or something went
// went wrong (RESULT_CANCELED). Either way we do not want to display this
// blank screen to the user. Take them back to the device connection screen.
else if (RESULT_CANCELED == resultCode)
{
finish();
}
}
出於某種原因,我又回到了零或RESULT_CANCELED每次即使我的子活動B,C,DI只有當用戶設置的結果選擇打開後退按鈕(我顯示一個「你確定」對話框,並且他們選擇退出,在B,C,DI中有onPause中的以下內容:userExiting是我從Exit對話框中設置的一個標誌
protected void onPause()
{
Log.i(this.toString(), "onPause");
// hack to try to setResult for an activity whose finishActivty was called
if (!this.exiting)
{
Log.i(this.toString(), "======== RESULT_OK ========");
Intent returnIntent = new Intent();
setResult(RESULT_OK, returnIntent);
finish();
}
displayed = false;
super.onPause();
}
任何想法?
編輯 - 要清楚的問題是,在舊Activity上調用finishActivty之後,由於結果從未設置,所以Activity A始終認爲它應該退出。一個奇怪的副產品。直到用戶導航兩次纔會發生這種情況。換句話說,B顯示,他們選擇去C.作品,但我可以在日誌中看到onActivityResult尚未被調用。用戶選擇從C到D,繁榮,我看到兩個調用onActivtyResult,'A;退出並且D保持顯示,並且用戶無法離開。
更新:由於這已經得到了很多的意見,我想我會發布此更新。該項目演變成有時會顯示單個活動,有時會將一個組顯示爲選項卡。在某些情況下,當用戶打包出標籤時,需要將數據返回到啓動標籤的活動。在我添加RESULT_CANCELED下面的代碼之前,總是會返回。還要確保在完成之前調用setResult。
if (getParent() == null)
{
setResult(Activity.RESULT_OK, intent);
}
else
{
getParent().setResult(Activity.RESULT_OK, intent);
}
順便說一下,你確定在回到活動中時確實需要展示一個確定的對話框嗎?我會發現真的很煩人。相反,您應該讓用戶輕鬆回到他們所在的位置。 – 2010-11-11 00:45:59
在我的情況下,我的要求不是讓他們回到他們所在的位置,而是在我們讓「確定」對話用戶不小心退出之前,如果他們退後,退出。一旦他們離開A並且接近B,C和D,他們就永遠不會回到A. – bursk 2010-11-11 01:25:58
哦,也許這是因爲這不是後退按鈕的預期行爲。如果我在一個屏幕上,我將移動到一個新屏幕,然後回到原來的屏幕。如果你遵循人們期待的範例,那麼問題會更少。 – 2010-11-11 16:13:42