2016-01-23 2 views
0

Ситуация:Получение результата от деятельности в последовательности

Я три вида деятельности, расположенной как так

активность A/Фрагмент A -> B/активность Фрагмент B -> C/активность фрагмента C

Моя конечная цель - получить результат от C до A. Я сделал это, используя startactivityforresult().

Проблема:

Когда в деятельности C, жму либо навигации вверх или кнопку возврата, а затем повторно ввести активность C из B. После этого я закончу с деятельностью и нажмите ОК. Я установил результат и закончил. Действие B получает результат в onActivityResult, и все в порядке (код запроса хорош с 0, а resultcode равен RESULT_OK). Затем активность B устанавливает тот же результат и заканчивается. Тем не менее, когда onActivityResult вызывается в Activity A, почему код результата 0 и данные являются нулевыми?

Я думал, что startactivityforresult отправляет результат обратно в предыдущую прямую деятельность.

активность

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); 
     } 
    }); 

активность Б

@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

Проблема, казалось бы, что при нажатии кнопки навигации вверх было создано новое намерение для Activity B. Это как-то устранило связь startactivityforresult() между Activity A и Activity B (как работает эта взаимосвязь, я не слишком ясен). Решение было просто повторно использовать предыдущую активность B вместо создания другой, выполнив:

android:launchmode="singleTop" 

в файле манифеста для деятельности B

+0

Я не думаю, что это причина. Я только что написал демо, и все сработало, как ожидалось. –

+0

Влияет ли ваша активность на onActivityResult()? –

Смежные вопросы