Android 为什么当我关闭第二个活动时onActivityResult()不工作?
我正在处理一个活动,其中显示一个AlertDialogFragment,有两个选项,每个选项都会打开一个新活动,当我选择第一个选项时,我使用以下代码:Android 为什么当我关闭第二个活动时onActivityResult()不工作?,android,android-intent,Android,Android Intent,我正在处理一个活动,其中显示一个AlertDialogFragment,有两个选项,每个选项都会打开一个新活动,当我选择第一个选项时,我使用以下代码: switch (which){ case 0: //Intent para registrar una compra Intent compra=new Intent(getActivity(),CompraActivity.class); compra.putExtra("NumeroTa
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;
}
结果_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{
}
}
如您所见,在完成之前,我已经在方法中发送了结果。
这是我的第一个活动中的覆盖方法:
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中,也没有问题或错误,除了第二个活动关闭时的方法外,其他方法都可以正常工作。使用此选项
getActivity().startActivityForResult(compra, RESULT_CORRECT);
及
使用getActivity确保将调用活动的onActivityResult,而不是对话框片段的onActivityResult
当您不使用getActivity时,将调用片段的onActivityResult。因为您的片段是一个对话框片段,所以只要您单击它上的按钮,它就会被关闭。因此,您需要在调用活动时处理结果。这是通过使用getActivity来实现的。关于您的信息,请在代码中只使用英语-这是一种很好的做法,我不理解变量名=在开始行的onActivityResult中设置断点,在“setResultRESULT\u OK,returnIntent;”中设置断点,在“setResultRESULT\u OK,returnIntent;”中设置断点线检查一下ActivityResult,它是不是在一场正式比赛后开始的我知道西班牙语和英语混合是一种不好的做法,但有时我忘了只用英语编码哈哈,谢谢你的观察@Kirillshalnovoh,我要试试,可悲的是我从来没有在Android Studio中使用过调试器,但一定要检查一下@Kirillshalnov谢谢我的朋友,这非常有效,现在应用程序进入方法只有一件事,我用来填充listview运行但不改变内容的方法,有点奇怪,我是否需要刷新活动的UI,或者有其他方法可以做到这一点?如果它不改变内容,那么您应该在更新它的地方验证代码。更新了吗?刷新列表方法。您可能正在执行类似于mList=newarraylist的操作,这使得mList变量保存新列表,但ListView仍然记得旧列表。您需要改为使用mList.clear。是的,它正在更新,我使用RefreshList方法从sqlite数据库加载数据,然后在列表视图中显示数据,但是发布关于此问题的另一个问题是一个更好的选择,我将把链接放在这里。谢谢@Rohit5K2是的,一个新问题会更好。另外,请不要忘记接受它作为您的答案,因为它解决了原来的问题。