当我关闭第二个Activity时,为什么onActivityResult()没有工作?

时间:2015-01-31 22:34:03

标签: android android-intent

我正在使用一个Activity,它显示一个带有两个选项的AlertDialogFragment,每个选项都打开一个新的Activity,当我选择第一个选项时,我使用这个代码:

switch (which){
    case 0:
        //Intent para registrar una compra
        Intent compra=new Intent(getActivity(),CompraActivity.class);
        compra.putExtra("NumeroTarjeta", tarjetasCredito.getNumeroTarjeta());
        compra.putExtra("SaldoDisponible",tarjetasCredito.getSaldoDisponible());
        startActivityForResult(compra, RESULT_CORRECT);
        break;
    case 1:
        //Intent para registrar pago
        Intent pago=new Intent(getActivity(),PagoActivity.class);
        pago.putExtra("NumeroTarjeta", tarjetasCredito.getNumeroTarjeta());
        startActivityForResult(pago, RESULT_CORRECT);
        break;
}

RESULT_CORRECT = 1

这样可以正常工作,但是当我在第二个活动中设置结果onActivityResult()时,问题就出现了问题。

我想要做的是启动一个更改ListView数据的方法。 可能是什么问题呢?我已经尝试了一些东西,但没有任何效果如预期的那样。

以下是第二项活动的代码:

public void AgregarCompra(View view) {
    try{
        String lugarCompra=lugar.getText().toString();
        double totalCompra=Double.valueOf(total.getText().toString());
        if(isDataCorrect(lugarCompra,totalCompra)){
            if(SaldoDisponible >= totalCompra){
                DB.SQLFields="NumeroTarjeta,Lugar,Total,Fecha,TipoMovimiento";
                DB.SQLInsert="INSERT INTO "+TABLAS.HISTORIAL_CREDITO+"("+DB.SQLFields+") VALUES ('"+NumeroTarjeta+"','"+lugarCompra+"',"+totalCompra+",'"+ fechaCompra +"','Compra'"+");";
                DB.db.execSQL(DB.SQLInsert);
                DB.SQLUpdate="UPDATE "+TABLAS.TARJETAS_CREDITO+" SET SaldoDisponible="+(SaldoDisponible-totalCompra)+"";
                DB.db.execSQL(DB.SQLUpdate);
                DB.db.close();
                Toast.makeText(this,"Exito al guardar.",Toast.LENGTH_SHORT).show();
                Intent returnIntent=new Intent();
                setResult(RESULT_OK,returnIntent);
                finish();
            }else{
                ErrorDialogFragment errorDialog=new ErrorDialogFragment();
                errorDialog.show(getFragmentManager(),"Error");
            }
        }else{
            Toast.makeText(this,"Datos vacios.",Toast.LENGTH_SHORT).show();
        }
    }catch (Exception ex){
        Log.e(LOG_TAG,"Error de SQLite: "+ex.getMessage());
        Toast.makeText(this,"Error al insertar.",Toast.LENGTH_SHORT).show();
    }
}

正如您所看到的,我已经在完成之前将结果发送到方法中。 这是我第一次活动中的覆盖方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==RESULT_CORRECT ){
        if(resultCode==RESULT_OK){
            RefreshList();
            mAdapter.notifyDataSetChanged();
        }
    }else{
    }
}

另外,奇怪的是,即使在logcat中,也没有问题或有一些错误,当第二个活动关闭时,一切都适用于方法的例外。

1 个答案:

答案 0 :(得分:0)

使用此

getActivity().startActivityForResult(compra, RESULT_CORRECT);

getActivity().startActivityForResult(pago, RESULT_CORRECT);

使用getActivity()确保将调用活动的onActivityResult()而不是对话框片段。

如果不使用getActivity(),则会调用片段的onActivityResult。因为您的片段是一个对话框片段,所以当您单击其上的按钮时它将立即关闭。所以你需要在调用activity时处理结果。这是通过使用getActivity()

实现的