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

我有一个片段,其中有两个带有两个不同的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可以完全按预期运行。


  AnadirAlimento活动:


将项目添加到列表结束后,可以单击“后退”按钮,这将触发此方法:

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


现在在该片段中,使用正确的resultCode,requestCode和data触发了OnActivityResult方法


  分段:


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


而在


  Mostrar胰岛素活动


当您再次按下backButton时

MostrarInsulina活动:

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

}


我正在执行与其他类相同的操作,但期望其行为与上一个类完全相同,但是在finish()获得后,使用正确的requestCode但具有resultCode == 0和data intent = null的片段中的OnActitivyResult方法。

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

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

非常感谢

最佳答案

我只想为可能面临相同问题的人回答我自己的问题。

事实是,在我进行第二次活动时,我在设置意图之前正在调用super.onBackPressed();,这就是我所做的更改:

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

10-08 14:15