Cómo pasar los valores de una actividad a la actividad anterior
-
13-09-2019 - |
Pregunta
¿Cómo pasar un valor de una pantalla a la pantalla anterior?
Considere este caso: Tengo dos actividades. La primera pantalla tiene un TextView
y un botón y la segunda actividad tiene un EditText
y un botón.
Si hago clic en el primer botón, entonces tiene que pasar a la segunda actividad y aquí usuario tiene que escribir algo en el cuadro de texto. Si se presiona el botón de la segunda pantalla a continuación, los valores del cuadro de texto deben ir a la primera actividad y que se debe mostrar en la primera TextView
actividad.
Solución
Para capturar las acciones realizadas en una actividad dentro de otro requiere tres pasos.
Lanzamiento de la Actividad secundaria (su 'Editar texto' Actividad) como mediante el uso de la subactividad startActivityForResult
de su actividad principal.
Intent i = new Intent(this,TextEntryActivity.class);
startActivityForResult(i, STATIC_INTEGER_VALUE);
Dentro de la subactividad, en lugar de cerrar la actividad cuando un usuario hace clic en el botón, es necesario crear una nueva Intención e incluir el valor de texto introducida en su paquete de extras. Para pasar de nuevo a la llamada setResult
padres antes de llamar finish
para cerrar la actividad secundaria.
Intent resultIntent = new Intent();
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, enteredTextValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();
El último paso consiste en la Actividad de llamadas: onActivityResult
Ignorar para escuchar las devoluciones de llamada de la actividad de introducción de texto. Obtener el extra de la intención de volver a obtener el valor de texto que debe mostrar.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (STATIC_INTEGER_VALUE) : {
if (resultCode == Activity.RESULT_OK) {
String newText = data.getStringExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
// TODO Update your TextView.
}
break;
}
}
}
Otros consejos
Hay dos maneras por las cuales se puede acceder a las variables o en otras clases de objeto o actividad.
A. Base de datos
B. preferencias compartidas.
C. La serialización de objetos.
D. Una clase que puede contener datos comunes puede ser nombrado como utilidades comunes que depende de usted.
E. Pasando datos a través de los intentos y Interface parcelable.
depende de sus necesidades de proyectos.
A. Base de datos
SQLite es una base de datos de código abierto que se incrusta en Android. SQLite es compatible con funciones de bases de datos relacionales estándar como la sintaxis SQL, transacciones y declaraciones preparadas.
Tutoriales - http://www.vogella.com/articles/AndroidSQLite/ article.html
B. Preferencias compartidas
Supongamos que desea almacenar nombre de usuario. Por lo que habrá ahora dos cosas una clave nombre de usuario, Valor Valor.
¿Cómo almacenar
// Create object of SharedPreferences.
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
//now get Editor
SharedPreferences.Editor editor = sharedPref.edit();
//put your value
editor.putString("userName", "stackoverlow");
//commits your edits
editor.commit();
Uso putString (), putBoolean (), putInt (), putFloat (), putLong () que puede salvar su dtatype deseada.
¿Cómo se ha podido recuperar
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");
http://developer.android.com/reference/android/content /SharedPreferences.html
C. serialización de objetos
serlization objeto se utiliza si queremos salvar a un estado de objeto para enviarlo a través de la red o se puede utilizar para su propósito también.
Utilice Java Beans y almacenar en él como uno de sus campos y getters y setter de uso para ese
JavaBeans son clases Java que tienen propiedades. Pensar en propiedades como variables de instancia privada. Ya que son privados, la única manera de que se puede acceder desde fuera de su clase es a través de métodos de la clase. los métodos que cambian el valor de una propiedad son llamados métodos setter, y los métodos que recuperan el valor de una propiedad son llamados métodos getter.
public class VariableStorage implements Serializable {
private String inString ;
public String getInString() {
return inString;
}
public void setInString(String inString) {
this.inString = inString;
}
}
Establecer la variable en usted envía método utilizando
VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);
A continuación, utilice Serialzation objeto a serializar este objeto y en su otra clase deserializar este objeto.
En la serialización de un objeto puede ser representado como una secuencia de bytes que incluye los datos del objeto, así como información sobre el tipo de objeto y los tipos de datos almacenados en el objeto.
Después de un objeto serializado se ha escrito en un archivo, se puede leer desde el archivo y deserializar es decir, la información de tipo y los bytes que representan el objeto y sus datos pueden ser utilizados para crear el objeto en la memoria.
Si desea tutorial para este referirse este enlace
http://javawithswaranga.blogspot.in/2011/08 /serialization-in-java.html
obtener la variable en otras clases
D. CommonUtilities
Puede hacer una clase por su cuenta propia, que puede contener datos común que con frecuencia necesita en su proyecto.
muestra
public class CommonUtilities {
public static String className = "CommonUtilities";
}
E. pasar datos a través Intentos
Por favor, consulte este tutorial para esta opción de pasar datos.
usted no tiene que ..
simplemente llamar newIntenet () de segunda actividad
Intent retData=new Intent();
Agregar datos a pasar de nuevo
putExtras (retData.putExtra("userName", getUsrName()));
seguir adelante con setResult
setResult(RESULT_OK, retData);
y después puede terminar
finish();
startActivityForResult ()
Y aquí hay un enlace desde el SDK con más información:
http://developer.android.com/guide/appendix /faq/commontasks.html#opennewscreen
y baje hasta la parte titulada "La devolución de un resultado de una pantalla"
A menudo utilizo variables estáticas en la actividad vocación con métodos setter estáticas para ajustarlos.
De esta manera puedo cambiar los valores en cualquier actividad a voluntad, sin tener en cuenta el flujo exacto de control entre las distintas actividades.
Tenga en cuenta que este truco sólo se puede utilizar si no se preocupan por la instanciación de más de una copia de la misma actividad (de clase) en la aplicación, sin embargo, me pareció que este es el más fácil de implementar, y lo uso más.
La mejor manera de hacer aquí es poner variable a una clase común que se define fuera del alcance
public class Utils
{
public static String mPosition;
}
dentro de su código (por ejemplo OnButtonClick etc ...)
Intent intent = new Intent(Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI);
Utils.mPosition = mViewData.mPosition + "";
LogHelper.e(TAG, "before intent: " + Utils.mPosition);
startActivityForResult(intent, Keys.PICK_CONTACT);
en el código de
@ Override onActivityResult pública vacío (int requestCode, int resultCode, los datos de intención) { si (requestCode == Keys.PICK_CONTACT) { si (resultCode == Activity.RESULT_OK) { Uri Datos de contacto = data.getData ();
//you may use the variable here after intent result
LogHelper.e(TAG, "after intent: " + Utils.mPosition);
....