2015-01-31 5 views
0

Я работаю с деятельностью, где он показывает AlertDialogFragment с двумя вариантами, каждый из которых открывает новую активность, когда я выбираю первый вариант я использую этот код:Почему не работает onActivityResult(), когда я закрываю второе действие?

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

Установите точки останова в 'onActivityResult' в стартовой строке, в' AgregarCompra' on 'setResult (RESULT_OK, returnIntent);» линия. И проверить onActivityResult, началось ли это после AgregarCompra или нет –

+1

Я знаю, что это плохая практика смешать испанский и английский языки, но иногда я забыл код на английском языке только ха-ха, но спасибо за наблюдение. @KirillShalnov –

ответ

0

Используйте этот

getActivity().startActivityForResult(compra, RESULT_CORRECT); 

и

getActivity().startActivityForResult(pago, RESULT_CORRECT); 

с использованием getActivity() гарантирует, что onActivityResult() деятельности будет называться не диалог осколком.

Когда вы не используете getActivity(), тогда вызывается onActivityResult фрагмента. Поскольку ваш фрагмент является фрагментом диалога, он будет закрыт, как только вы нажмете на нем кнопку. Таким образом, вам нужно обработать результат при вызове активности. Это достигается с помощью getActivity().

+0

Спасибо моему другу, это сработало очень хорошо, теперь приложение вводит метод только в одну вещь, метод, который я использую для заполнения прогона listview, но не меняющий контент, что-то странное, мне нужно обновить пользовательский интерфейс деятельности или есть другой способ сделать это? –

+0

Если это не изменяет содержимое, вы должны проверить код, в котором вы его обновляете. Обновляется ли она? – Rohit5k2

+0

Метод 'RefreshList()'. Вероятно, вы делаете что-то вроде 'mList = new ArrayList <>()', что заставляет переменную mList удерживать новый список, но 'ListView' все еще помнит старый. Вместо этого вам нужно использовать 'mList.clear()'. –

Смежные вопросы