gpt4 book ai didi

android - onActivityResult 第二次调用时返回intent data = null

转载 作者:行者123 更新时间:2023-11-29 19:50:04 25 4
gpt4 key购买 nike

我知道有关于这个主题的答案,但行为与其他问题不同。

我有一个 fragment ,它有两个按钮和两个不同的 onClick 方法。每个 onClick 方法都会启动一个 startActivityForResult(),但在 fragment 中的 onActivityResult(int requestCode, int resultCode, Intent data) 方法中,只有其中一个 Activity 的 resultCode 正确。

让我用代码和例子来解释一下:

Fragment:

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

现在在 fragment 中,OnActivityResult 方法被触发并带有正确的 resultCode、requestCode 和数据

Fragment:

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

然后问题是,当您单击另一个按钮时,启动另一个 Activity 的按钮(也在 fragment 中,但在 AsyncTask onPostExecute 方法中)

Fragment(在这个fragment类里面有一个私有(private)类extends 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() 被获取后,使用正确的 requestCode 调用 fragment 中的 OnActitivyResult 方法,但是resultCode == 0 和数据 Intent = null。

为什么会这样?是因为 AsynTask 吗?

我有点迷路了,我不知道从这里到哪里去。

非常感谢

最佳答案

我想为可能面临同样问题的人回答我自己的问题..

问题是,在我的第二个 Activity 中,我在设置 Intent 之前调用了 super.onBackPressed();,所以这是我所做的更改:

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

关于android - onActivityResult 第二次调用时返回intent data = null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37210965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com