1

Я знаю, что есть ответы на эту тему, но поведение не совпадает с другими вопросами.onActivityResult возвращает данные о намерениях = null при вызове во второй раз

У меня есть фрагмент, который имеет две кнопки с двумя разными методами onClick. Каждый метод onClick запускает startActivityForResult(), но по методу onActivityResult (int requestCode, int resultCode, Intent data) во фрагменте только один из этих действий имеет корректный результат resultCode.

Позвольте мне объяснить это с кодом, а также пример:

Фрагмент:

@Override 
public void onClick(View view) { 
    int id = view.getId(); 
    switch (id) { 

     case R.id.fab: 
      Log.e(LOG_TAG, getActivity().toString()); 
      Intent intent = new Intent(getActivity(), AnadirAlimentoActivity.class); 
      startActivityForResult(intent, 2); 
      break; 

    } 
} 

это AnadirAlimentoActivity является тот, который работает точно так же, как и ожидалось.

AnadirAlimentoActivity:

Когда вы закончили добавлять элементы в список вы можете нажать на кнопку назад и запускает этот метод:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(); 
    intent.putExtra(AppConstant.LISTA_ALIMENTOS_SELECCIONADOS, alimentosSeleccionados); 
    setResult(RESULT_OK, intent); 
    finish(); 
} 

и теперь в фрагменте Метод OnActivityResult запускается с правильным кодом результата, requestCode и данными

Фрагмент:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 2) { 
     ArrayList<Alimento> alimentos = data.getParcelableArrayListExtra(AppConstant.LISTA_ALIMENTOS_SELECCIONADOS); 
     if (alimentos != null) { 
      for (Alimento alimento : alimentos) { 
       Log.e("alimento devuelto", alimento.getDescripcion() + " cantidad: " + String.valueOf(alimento.getCantidad()) 
         + " proc: " + alimento.getProcedencia()); 
       mAlimentos.add(alimento); 
      } 
     } 
     popularLista(); 
     isEnviarAlimento(); 
    } else { 
     if (requestCode == 3) { 
      if (data != null) { 
       String remanente = data.getStringExtra(AppConstant.INSULINA_REMANENTE); 
       if (remanente != null) { 
        _insulinaRemanente.setText(remanente); 

       } 
      } 
     } 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

Тогда проблема заключается в том, что при нажатии на другую кнопку, тот, который запустит другую деятельность (в фрагменте тоже, но в пределах AsyncTask onPostExecute метода)

Фрагмент (внутри этого класса фрагмента есть частный класс расширяет AsyncTask)

 @Override 
    protected void onPostExecute(Boolean aBoolean) { 
     super.onPostExecute(aBoolean); 
     if (!aBoolean) { 
      Toast.makeText(getActivity().getApplicationContext(), "Ha ocurrido un error por favor vuelve a intentarlo", Toast.LENGTH_LONG).show(); 
     } else { 
      Intent intent = new Intent(getActivity(), MostrarInsulinaActivity.class); 
      Log.e(LOG_TAG, getActivity().toString()); 
      startActivityForResult(intent, 3); 
     } 
     if (progressDialog != null && progressDialog.isShowing()) 
      progressDialog.dismiss(); 
    } 

И в

MostrarInsulinaActivity

при повторном нажатии на BackButton

MostrarInsulinaActivity:

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent _intent = new Intent(); 
    _intent.putExtra(AppConstant.INSULINA_REMANENTE, "holoa"); 
    setResult(RESULT_OK, _intent); 
    finish(); 

} 

Я делаю то же самое, как и в другом классе, ожидая вести себя так же, как и предыдущий, но после того, как finish() получает вызов метода OnActitivyResult в фрагменте с правильным кодом запроса , но с resultCode == 0 и th e data intent = null.

Почему это происходит? потому что AsynTask?

Я немного потерялся, и я не знаю, куда идти отсюда.

Спасибо большое

ответ

1

Я хочу, чтобы ответить на мой собственный вопрос просто для кого-то, кто мог бы столкнуться с такой же вопрос ..

Дело было, что на моей второй деятельности я призывающую super.onBackPressed(); перед установкой моего намерение, так что это изменение, которое я сделал:

@Override 
public void onBackPressed() { 
    Intent _intent = new Intent(); 
    _intent.putExtra(AppConstant.INSULINA_REMANENTE, "holoa"); 
    setResult(RESULT_OK, _intent); 
    finish(); 
    super.onBackPressed(); 
} 
+0

Спасибо, это действительно помогло мне :) –

+0

Вы радушные @ FelipeRibeiroR.Magalhaes – neteot