2016-01-23 169 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()? –