2016-01-23 76 views
0

情況:獲取從活動陸續結果

我有三個活動位於像這樣

活動A /片段A - >活動B /片段B - >活動C/C片段

我的最終目標是從C檢索結果返回到A.我已經使用startactivityforresult()完成了。

問題:

當在活性C,I按任一導航向上或後退按鈕,然後重新進入從B.活性Ç然後,我完成與活性和按OK鍵。我設定了結果並完成。活動B在onActivityResult中檢索結果,一切正常(請求代碼與0相符,resultcode等於RESULT_OK)。活動B然後設置相同的結果並結束。但是,當ActivityA中調用onActivityResult時,爲什麼結果代碼0和數據爲空?

我以爲startactivityforresult只會將結果發送回先前的直接活動。

活動A

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.activity_search_fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivityForResult(new Intent(v.getContext(), SearchActivity.class), REQUEST_RESTAURANT); 
     } 
    }); 

活動B

@Override 
public void onClick(View v) { 
    Intent intent = new Intent(v.getContext(), AddActivity.class); 
    intent.putExtra(EXTRA_YELP_RESTAURANT, mRestaurant); 
    ((Activity)v.getContext()).startActivityForResult(intent, FavoritesActivity.REQUEST_RESTAURANT); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if ((requestCode == FavoritesActivity.REQUEST_RESTAURANT) && 
      (resultCode == Activity.RESULT_OK)) { 
     setResult(resultCode, data); 
     finish(); 
    } 
} 

活動Ç

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.add_done_check: 
      Intent data = new Intent(); 
      data.putExtra(EXTRA_MY_RESTAURANT, mRestaurant); 
      getActivity().setResult(Activity.RESULT_OK, data); 
      getActivity().finish(); 
      break; 
     default: 
      return false; 
    } 
    return true; 
} 

回答

0

問題似乎是當按下導航向上按鈕時,爲活動B創建了一個新的意圖。這不知何故地刪除了活動A和活動B之間的startactivityforresult()關係(這種關係如何工作,我不太清楚)。解決的辦法是剛剛重新使用以前的活動B,而不是創建一個又一個這樣做的:

android:launchmode="singleTop" 

清單文件中的活動B

+0

我不認爲這是什麼原因。我只是寫了一個演示,一切都按預期工作。 –

+0

您的活動A是否正確處理onActivityResult()? –