onActivityResult在第二次调用时返回intent data = null
我知道有关于此主题的答案,但其行为与其他问题不同。onActivityResult在第二次调用时返回intent data = 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方法被正确的resultCode,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
当你按后退按钮再次
MostrarInsulinaActivity:
@Override
public void onBackPressed() {
super.onBackPressed();
Intent _intent = new Intent();
_intent.putExtra(AppConstant.INSULINA_REMANENTE, "holoa");
setResult(RESULT_OK, _intent);
finish();
}
我做的一样,在其他类期待究竟表现为前一后,但finish()会调用片段中的OnActitivyResult方法,该方法使用正确的requestCode,但使用resultCode == 0和th e数据意图=空。
这是怎么发生的?是因为AsynTask?
我有点失落,我不知道该从哪里出发。
谢谢你这么多
我要回答我的问题只是别人谁可能设置之前,面临着同样的问题..
的事情是,我的第二个活动我打电话super.onBackPressed();
我意图,所以这是我作出的变化:
@Override
public void onBackPressed() {
Intent _intent = new Intent();
_intent.putExtra(AppConstant.INSULINA_REMANENTE, "holoa");
setResult(RESULT_OK, _intent);
finish();
super.onBackPressed();
}
谢谢,这真的帮了我:) –
不客气@ FelipeRibeiroR.Magalhaes – neteot