为什么当我关闭第二个 Activity 时 onActivityResult() 不起作用?
Why doesn't onActivityResult() works when I close a second Activity?
我正在使用一个 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
这工作正常,但是当我在第二个 activity 中设置结果时出现问题,onActivityResult()
似乎不起作用。
我想要做的是启动一个更改 ListView 数据的方法。
可能是什么问题呢?我已经尝试了一些方法,但没有达到预期效果。
这是第二个 activity 的代码:
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();
}
}
如您所见,我在完成之前已经在方法中发送了结果。
这是我第一个activity中的覆盖方法:
@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 中,也没有问题或错误,当第二个 activity 关闭时,一切正常,方法异常。
使用这个
getActivity().startActivityForResult(compra, RESULT_CORRECT);
和
getActivity().startActivityForResult(pago, RESULT_CORRECT);
使用 getActivity()
确保 activity 的 onActivityResult()
将被调用而不是对话片段的。
当您不使用 getActivity()
时,将调用片段的 onActivityResult
。因为您的片段是一个对话框片段,所以只要您单击它上面的按钮,它就会关闭。所以你需要处理调用activity的结果。这是通过使用 getActivity()
.
实现的
我正在使用一个 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
这工作正常,但是当我在第二个 activity 中设置结果时出现问题,onActivityResult()
似乎不起作用。
我想要做的是启动一个更改 ListView 数据的方法。 可能是什么问题呢?我已经尝试了一些方法,但没有达到预期效果。
这是第二个 activity 的代码:
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();
}
}
如您所见,我在完成之前已经在方法中发送了结果。 这是我第一个activity中的覆盖方法:
@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 中,也没有问题或错误,当第二个 activity 关闭时,一切正常,方法异常。
使用这个
getActivity().startActivityForResult(compra, RESULT_CORRECT);
和
getActivity().startActivityForResult(pago, RESULT_CORRECT);
使用 getActivity()
确保 activity 的 onActivityResult()
将被调用而不是对话片段的。
当您不使用 getActivity()
时,将调用片段的 onActivityResult
。因为您的片段是一个对话框片段,所以只要您单击它上面的按钮,它就会关闭。所以你需要处理调用activity的结果。这是通过使用 getActivity()
.