Cómo utilizar startActivityForResult () a través de un DialogFragment?

Mi aplicación requiere un nombre de usuario que se agregará para funcionar correctamente. El mainActivity muestra el nombre de usuario en la parte superior que recupera de la base de datos. El mainActivity también tiene un botón que lleva a la actividad 'addusername' a través del método startActivityForResult (); Cuando el usuario realmente introduce un nombre de usuario, entonces sólo el nombre de usuario en la actividad principal se actualiza y se muestra. Hay un botón de envío en la actividad 'addusername' que añade el nombre de usuario y no setResult(RESULT_OK);
Todo funciona bien si se introduce el nombre de usuario haciendo clic en el botón 'addusername'.

Ahora, he añadido un diálogo en mainActivity que se muestra cuando la aplicación se inicia sólo si no existe nombre de usuario en la base de datos. El diálogo ofrece una opción para agregar nombre de usuario, que si se hace clic, lleva a la actividad 'addusername'. Pero al presionar el botón 'submit', el mainActivity se llama, pero el nombre de usuario no se actualiza (aunque la base de datos se actualiza)

Aquí está el código para la actividad de 'addusername':

 public void submitusername(View view) { userdatabase name = new userdatabase(this); name.open(); String user = name.getusername(); name.close(); EditText cinone = (EditText) findViewById(R.id.username); username = cinone.getText().toString(); if(user.equals("")) { userdatabase entry = new userdatabase(Editprofile.this); entry.open(); entry.createEntry(username, null, null, null); entry.close(); Context context = getApplicationContext(); CharSequence text = "Added new user!"; int duration = Toast.LENGTH_LONG; Toast toast = Toast.makeText(context, text, duration); toast.show(); } else { userdatabase update = new userdatabase(Editprofile.this); update.open(); update.updateUsername(username); update.close(); Context context = getApplicationContext(); CharSequence text = "Username updated!"; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); toast.show(); } setResult(RESULT_OK); finish(); } 

Aquí está el código de diálogo:

 public class NouserFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage(R.string.nouseralert) .setPositiveButton(R.string.add, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent intent = new Intent(getActivity().getBaseContext(), Editprofile.class); startActivity(intent); } }) .setNegativeButton(R.string.ignore, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User cancelled the dialog } }); // Create the AlertDialog object and return it return builder.create(); } } 

Entiendo que esto está sucediendo porque el diálogo no llama al método startActivityForResult (). Pero incluso si cambio mi código, como esto:

 Intent intent = new Intent(getActivity().getBaseContext(), Editprofile.class); startActivityForResult(intent, 0); 

Todavía no ayuda. Probablemente porque el método onActivityResult () no se encuentra en la misma clase de la que se ha llamado startActivityForResult (), pero no sé cómo conseguirlo.

EDIT 1: intentado usar

 Intent intent = new Intent(getActivity(), Editprofile.class); startActivityForResult(intent, 0); 

Es inútil.

¿Has probado de esta manera:

 Intent intent = new Intent(getActivity(), Editprofile.class); startActivityForResult(intent, 0); 

Cuando crea el objeto Intent, utiliza BaseContext, en lugar de utilizar la referencia a la actividad en sí.

Utilizando

 Intent intent = new Intent(getActivity(), Editprofile.class); getActivity().startActivityForResult(intent, 0); 

¡trabajó!

  • Java.lang.NumberFormatException: Invalid int: "5"
  • ¿Cómo asignar id únicos a las vistas creadas dinámicamente?
  • Resolver los errores de migración de Holoeverywhere 1.4
  • Cómo establecer el valor predeterminado de SwitchPreference en android?
  • @ Convertido a% 40 en la solicitud HTTPPost
  • Pasar una matriz de Mats a código nativo
  • Error de Android Studio: org.gradle.process.internal.ExecException
  • Certificado de fijación en Android con Robospice
  • En RxJava, cómo reintentar / reanudar en caso de error, en lugar de completar el observable
  • ¿Existe un límite para el número de archivos en un directorio de una tarjeta SD?
  • Cómo mover el elemento específico en la lista de arreglos al primer elemento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.