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)
- No se puede limpiar el proyecto en Android Studio
- ¿Por qué RecyclerView onBindViewHolder se llama una sola vez?
- Java / Android Programación / EditText -> getText (). ToString ()
- Native Crash SIGSEGV en Android JNI
- Importar el R.java de phonegap a mi plugin?
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.
- Android: manejar la desconexión inesperada de Internet durante la descarga de datos
- Exportar clave pública RSA a PEM String utilizando java
- Agregar una etiqueta dentro de un TextView en android
- Obtenga la colección de nombres de parámetros de la url de Java / Android
- Android, ¿Cómo puedo obtener texto de TextView en OnClick
- java.lang.VerifyError: com / crashlytics / android / core / CrashlyticsCore
- Protege y desprotege el archivo para evitar la eliminación accidental en Android mediante aplicaciones de limpieza con errores
- ¿Existe realmente el Objeto Inmortal?
¿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ó!